Суммировать данные измерений в одну строку - PullRequest
0 голосов
/ 16 июня 2020

У меня есть измерение с рядом атрибутов, подобных следующим, которые я упростил для 1 продукта и подмножества столбцов:

Sample data

Что я хочу сделать, так это подвести итог: для данного ProdID, каков текущий ClosedDate? когда началась Текущая закрытая дата? Какая была предыдущая ClosedDate? Когда началась предыдущая ClosedDate?

например, из этого примера мой ответ будет:

sample answer

Закрытые даты не соответствуют каким-либо конкретным заказ. У продукта не обязательно должна быть дата закрытия, если она равна -1.

Я подумал, что могу использовать ROW_NUMBER () для индексации каждого элемента истории, так как это поможет с самыми последними данными, и предыдущий ClosedDate. Я не понимаю, как сделать предыдущую дату закрытия действительной, особенно в случае, когда у меня есть 2 строки истории, относящиеся к 20200408.

Любые предложения приветствуются.

1 Ответ

0 голосов
/ 17 июня 2020

Один вариант использует только функции windows. Предположим, что связи на closedDate разорваны выбором самого высокого historyRow, это будет:

select 
    prodID,
    closedDate as closedDateCurrent,
    validFrom as closedDateCurrentStart,
    previousClosedDate,
    previousClosedDateStart
from (
    select
        t.*,
        row_number()    
            over(partition by prodID order by closedDate desc, historyRow desc) 
            as rn,
        lag(closedDate) 
            over(partition by prodID order by closedDate desc, historyRow desc) 
            as previousClosedDate,
        lag(validFrom) 
            over(partition by prodID order by closedDate desc, historyRow desc) 
            as previousClosedDateStart
    from mytable t
) t
where rn = 1
...