Fonction de window sur 30 jours mais les lignes manquantes

J'essaie d'get un total cumulatif pour le nombre de produits vendus au cours des 30 derniers jours, en plus du nombre de produits vendus chaque jour. J'ai essayé de le faire avec une fonction de window entre la ligne précédente et la ligne courante mais le problème est que les produits ne font pas toujours une vente tous les jours, donc ma fonction de window regarde en arrière 30 rangées au lieu de 30 jours.

Les exemples de données ressemblent à:

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 

Ma question est:

 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 

Comme vous pouvez voir quand la date rencontre 2016-11-04 wrong_answer regarde encore 30 lignes au lieu de 30 jours. Y a-t-il un moyen d'accomplir ce que j'essaie de faire?

Merci

Si vous définissez la window de 30 jours ..

  select t1.[date], t1.prod_id, t1.sales, (select distinct sum(sales) over(order by prod_id) from prod_sales as t2 where t2.date<= t1.date and t2.date > dateadd(day,-30,t1.date) and t2.prod_id = t1.prod_id) from prod_sales as t1 

Si vous définissez la window d'un mois.

 select t1.[date], t1.prod_id, t1.sales, (select distinct sum(sales) over(order by prod_id) from prod_sales as t2 where t2.date<= t1.date and t2.date > dateadd(month,-1,t1.date) and t2.prod_id = t1.prod_id) from prod_sales as t1 

Note: Obtenir un peu différent de votre réponse correcte … corrigez-moi si je n'ai pas bien compris votre question.