【问题标题】:Calculating the moving average in Vertica for all stocks计算 Vertica 中所有股票的移动平均线
【发布时间】:2021-12-30 07:47:35
【问题描述】:

例如,我有一个股票表:

CREATE TABLE Ticks 
(
    ts TIMESTAMP, 
    Stock varchar(10), 
    Bid float
);

INSERT INTO Ticks VALUES('2011-07-12 10:23:54', 'abc', 10.12);
INSERT INTO Ticks VALUES('2011-07-12 10:23:58', 'abc', 10.34);
INSERT INTO Ticks VALUES('2011-07-12 10:23:59', 'abc', 10.75); 
INSERT INTO Ticks VALUES('2011-07-12 10:25:15', 'abc', 11.98); 
INSERT INTO Ticks VALUES('2011-07-12 10:25:16', 'abc'); 
INSERT INTO Ticks VALUES('2011-07-12 10:25:22', 'xyz', 45.16); 
INSERT INTO Ticks VALUES('2011-07-12 10:25:27', 'xyz', 49.33); 
INSERT INTO Ticks VALUES('2011-07-12 10:31:12', 'xyz', 65.25); 
INSERT INTO Ticks VALUES('2011-07-12 10:31:15', 'xyz'); 

COMMIT;

我想在 Vertica 中通过一次查询计算所有股票的移动平均线。

这是只针对一只股票的方法(根据 Vertica 网站):

SELECT 
    ts, bid, 
    AVG(bid) OVER (ORDER BY ts
                   RANGE BETWEEN INTERVAL '40 seconds' PRECEDING AND CURRENT ROW)
FROM 
    ticks 
WHERE 
    stock = 'abc' 
GROUP BY 
    bid, ts 
ORDER BY 
    ts;

输出:

         ts          |  bid  |     ?column?
---------------------+-------+------------------
 2011-07-12 10:23:54 | 10.12 |            10.12
 2011-07-12 10:23:58 | 10.34 |            10.23
 2011-07-12 10:23:59 | 10.75 | 10.4033333333333
 2011-07-12 10:25:15 | 11.98 |            11.98
 2011-07-12 10:25:16 |       |            11.98
(5 rows)


DROP TABLE Ticks CASCADE;

如果我尝试选择所有股票:

SELECT 
    stock, ts, bid, 
    AVG(bid) OVER (ORDER BY ts
                   RANGE BETWEEN INTERVAL '40 seconds' PRECEDING AND CURRENT ROW)
FROM 
    ticks 
GROUP BY 
    stock, bid, ts 
ORDER BY 
    stock, ts;

我得到一个错误的结果。

我该如何解决这个问题?

【问题讨论】:

    标签: sql vertica moving-average


    【解决方案1】:

    在您对AVG() 的调用中添加PARTITION BY 子句:

    SELECT ts, bid,
           AVG(bid) OVER (PARTITION BY stock ORDER BY ts
                          RANGE BETWEEN INTERVAL '40 seconds' PRECEDING AND
                          CURRENT ROW)
    FROM ticks
    ORDER BY ts;
    

    【讨论】:

      猜你喜欢
      • 2016-04-11
      • 1970-01-01
      • 2012-06-20
      • 1970-01-01
      • 2014-11-18
      相关资源
      最近更新 更多