2017-06-06 74 views
0

我有一個列的SQL Server表:如何聚合價格OHLC數據

ID, START_DTTM, OPEN, HIGH, LOW, CLOSE 

我必須每小時彙總數據。

所以,我想這個查詢:

SELECT 
    ID, 
    MIN(START_DTTM) START_DTTM, 
    MAX(HIGH) AS HIGH, 
    MIN(LOW) AS LOW 
FROM 
    MY_TABLE 
GROUP BY 
    ID, DATEPART(DAY, START_DTTM), DATEPART(HOUR, START_DTTM) 

和它的作品,但我不能拉打開和關閉。

我想是這樣的:

FIRST_VALUE(OPEN_PRICE) OVER (PARTITION BY 
DATEPART(DAY, START_DTTM), DATEPART(HOUR, START_DTTM) ORDER BY START_DTTM) 

,當然,這是行不通的。我能做什麼?

回答

0

您可以使用該子查詢:

SELECT ID, MIN(START_DTTM) START_DTTM, MAX(HIGH) AS HIGH, MIN(LOW) AS LOW, 
     MAX(CASE WHEN seqnum_asc = 1 THEN OPEN_PRICE END) as open_price, 
     MAX(CASE WHEN seqnum_desc = 1 THEN CLOSE_PRICE END) as close_price 
FROM (SELECT t.*, 
      ROW_NUMBER() OVER (PARTITION BY ID, DATEPART(DAY, START_DTTM), DATEPART(HOUR, START_DTTM) ORDER BY STRT_DTTM) as seqnum_asc, 
      ROW_NUMBER() OVER (PARTITION BY ID, DATEPART(DAY, START_DTTM), DATEPART(HOUR, START_DTTM) ORDER BY STRT_DTTM) as seqnum_desc 
     FROM MY_TABLE 
    ) t 
GROUP BY ID, DATEPART(DAY, START_DTTM), DATEPART(HOUR, START_DTTM);