Я пытаюсь получить общее количество за то, сколько из каждого продукта было продано за последние 30 дней, в дополнение к тому, сколько было продано каждый день. Я попытался сделать это с помощью функции окна между предыдущей и текущей строкой, но проблема в том, что продукты не всегда делают продажу каждый день, поэтому моя оконная функция оглядывается назад на 30 строк вместо 30 дней.Функция окна более 30 дней, но отсутствуют строки
Образец данных выглядит следующим образом:
date | prod_id | sales | wrong_answer | correct_answer
2016-09-22 123 5 5 5
2016-09-24 123 2 7 7
2016-09-30 123 5 12 12
2016-10-01 123 4 16 16
2016-10-06 123 6 22 22
2016-10-18 123 4 26 26
2016-10-20 123 6 32 32
2016-11-04 123 14 46 30
2016-11-05 123 40 86 70
2016-11-25 123 30 116 94
2016-11-26 123 9 125 103
2016-12-10 123 12 137 115
2016-12-12 123 8 145 123
2016-12-16 123 4 149 127
2016-12-31 123 3 152 130
2017-01-09 123 4 156 134
2016-09-22 456 etc etc etc
Мой запрос:
SELECT
date,
prod_id,
sales,
SUM(sales) OVER (PARTITION BY prod_id OVER BY date ASC ROWS BETWEEN 30 PRECEDING AND CURRENT ROW) as wrong_answer
FROM prod_sales
Как вы можете видеть, когда попадает дата 2016-11-04 wrong_answer еще оглядки 30 строк вместо 30 дней. Есть ли способ сделать то, что я пытаюсь сделать?
Благодаря
Возможно, использовать подзапрос? например дайте вашей таблице псевдоним (например, 'PS') и получим' mycolumn = (выберите сумму (sales) из prod_sales, где dateiff (день, дата, PS.date) между 0 и 30) ' – ZLK
Это было подробно обсуждено на dba.se: [Срочная сумма диапазона дат с использованием оконных функций] (http://dba.stackexchange.com/questions/114403/date-range-rolling-sum-using-window-functions) –