【问题标题】:Sql: How to get previous row/day close quote?Sql:如何获得前一行/天的收盘报价?
【发布时间】:2020-06-02 18:09:01
【问题描述】:

我有一个用于股票行情的“经典”sql 表:

日期、代码、开盘价、最高价、最低价、收盘价、成交量

我想计算一天的百分比变化,所以我需要获得前一天收盘价和今天收盘价。

如何在标准 Sql 中高效执行?

编辑:我的数据示例。必须在前一天收盘时计算变化值。

谢谢

【问题讨论】:

  • 请标记您正在使用的数据库,并提供示例数据和预期结果
  • 我正在使用 Ms Access,但将来我想迁移到 MySql/MariaDb
  • 请提供您的样本数据和预期结果
  • 这能回答你的问题吗? Access get value from previous record

标签: sql ms-access


【解决方案1】:

在任何合理的数据库中,您只需使用lag()。哦,好吧,这排除了 MS Access。您可以使用相关子查询来执行此操作。以下获取上一次关闭:

select q.*,
       (select top (1) q2.close
        from quotes as q2
        where q2.ticker = q.ticker and q2.quotedate < q.quotedate
        order by q2.quotedate desc
       ) as prev_close
from quotes as q;

我不确定您是如何计算更改的,但您可以使用子查询:

select q.*,
       (close - prev_close) / prev_close as change_ratio
from (select q.*,
             (select top (1) q2.close
              from quotes as q2
              where q2.ticker = q.ticker and q2.quotedate < q.quotedate
              order by q2.quotedate desc
             ) as prev_close
      from quotes as q
     ) as q;

【讨论】:

    【解决方案2】:
    sel ticker,quotedate,open,high,low,close,
    100.00*(abs(close-lag(close) over(order by quotedate)))/lag(close) over(order by quotedate) as change 
    from table
    

    这将是使用延迟的典型 SQL 方式

    【讨论】:

      猜你喜欢
      • 2018-08-27
      • 2021-11-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-12-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多