Получите данные за сегодня и предыдущие доступные даты в одной строке - PullRequest
0 голосов
/ 12 октября 2019

У меня есть следующие данные таблицы для обработки.

SYMBOL    DATE        OPENVALUE        CLOSEVALUE
-------------------------------------------------
ABC       2019-01-01  10               15
ABC       2019-01-02  17               19
ABC       2019-01-03  13               20
ABC       2019-01-04  18               30
ABC       2019-01-07  25               45
ABC       2019-01-08  40               50

Я хочу обработать и отобразить информацию следующим образом

SYMBOL        DATE        OPENVALUE        PREVDAYCLOSINGVALUE
--------------------------------------------------------------
ABC           2019-01-01  10               NA
ABC           2019-01-02  17               15
ABC           2019-01-03  13               19
ABC           2019-01-04  18               20
ABC           2019-01-07  25               30
ABC           2019-01-08  40               45

Если кто-то может помочь. Я столкнулся с проблемой внутреннего объединения текущей даты с предыдущими доступными данными даты.

Ответы [ 2 ]

2 голосов
/ 12 октября 2019

Вы ищете lag():

select t.*,
       lag(closevalue) over (partition by symbol order by date) as prev_closevalue
from t;
1 голос
/ 12 октября 2019

Используйте LAG().

Форма с тремя аргументами позволяет указать значение по умолчанию. Я бы не рекомендовал 'NA', поскольку он не имеет тот же тип данных, что и другие значения (которые выглядят как положительные целые числа), поэтому я использовал -1.

SELECT 
    t.*, 
    LAG(OPENVALUE, 1, -1) OVER(PARTITION BY [SYMBOL] ORDER BY [DATE]) AS PREVDAYCLOSINGVALUE
FROM mytable t
...