Использование over () в SQL Server - PullRequest
       8

Использование over () в SQL Server

0 голосов
/ 21 декабря 2018

Я пытаюсь реализовать запрос over() в SQL Server, который приводит к столбцу, который отображает сумму за последние 3 периода суммы покупки по имени.

Например, в period3, новый столбецбудет отображать сумму period1, period2, period3, сгруппированных по имени.В period4 он должен показывать сумму period2, period3 и period4.В period5, сумма period3, period4 и period5.И т. Д.

Идея заключается в том, чтобы использовать конкретную функцию over() в T-SQL для реализации решения.

Таблица:

    Date1 Name1 Purchase_Amount Period1
    Date1 Name2 Purchase_Amount Period1
    Date2 Name1 Purchase_Amount Period2
    Date2 Name2 Purchase_Amount Period2
    Date2 Name3 Purchase_Amount Period2
    Date3 Name1 Purchase_Amount Period3
    Date3 Name2 Purchase_Amount Period3
    Date3 Name3 Purchase_Amount Period3
    Date3 Name4 Purchase_Amount Period3
    Date4 Name1 Purchase_Amount Period4
    Date4 Name2 Purchase_Amount Period4
    Date4 Name3 Purchase_Amount Period4
    Date4 Name4 Purchase_Amount Period4
    ...

1 Ответ

0 голосов
/ 21 декабря 2018

Это должно делать то, что вам нужно, если предположить, что как только имя присутствует в таблице, в каждом последующем периоде будет строка для этого имени.

SELECT *,
        SUM(Purchase_Amount) OVER (PARTITION BY Name 
                                       ORDER BY Date ROWS BETWEEN 3 PRECEDING AND CURRENT ROW)
FROM YourTable

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

...