2017-06-06 14 views
0

私は列を持つSQL Serverのテーブルを持っています。集計する方法価格は

だから、私はこのクエリを試してみました:

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) 

、それは動作しますが、私はOPENとCLOSE引っ張ることはできません。

私はこのような何か試してみました:

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); 
関連する問題