2013-06-11 32 views
1

我有這種情況下,每個項目下落在一個特定的日期範圍(每7天)的採購訂單必須彙總。Teradata - 集團按日期風險

ITEM_NUMBER ORDERED_DATE ORDER_QUANTITY 
1   06/01/2013 5 
1   06/02/2013 12 
1   06/03/2013 3 
1   06/06/2013 8 
1   06/18/2013 7 
1   06/21/2013 9 
1   06/29/2013 3 
1   06/30/2013 4 

2   06/03/2013 24 
2   06/07/2013 1 
2   06/19/2013 22 
2   06/23/2013 12 
2   06/30/2013 9 

上面記錄有要被聚合成7天窗口相對於物體像下面

Item 1 - Orders from 06/01/2013 to 06/07/2013 as one group (7 days) 
Item 1 - Orders from 06/18/2013 to 06/24/2013 as second group (7 days) 
Item 1 - Orders from 06/29/2013 to 07/05/2013 as third group (7 days) 
Item 2 - Orders from 06/03/2013 to 07/09/2013 as forth group (7 days) and so on 

因此,最終輸出應是

ITEM_NUMBER MIN(ORDERED_DATE) SUM(ORDER_QUANTITY) 
1   06/01/2013   28 
1   06/18/2013   16 
1   06/29/2013   7 

2   06/03/2013   25 
2   06/19/2013   34 
2   06/30/2013   9 

請原諒如果這是一個重複。 在此先感謝!

回答

1

這裏是一個可能的解決方案:

select a.ITEM_NUMBER 
     , b.O_DATE 
     + ((cast((a.ORDERED_DATE - b.O_DATE) as INT)/7 MOD 7) * 7) 
      as SEVEN_DAY_WINDOW 
     , sum(ORDER_QUANTITY) as ORDER_QUANTITY 
from your_table a 
join (
    select ITEM_NUMBER, min(ORDERED_DATE) as O_DATE 
    from your_table 
    group by ITEM_NUMBER 
    ) b 
on a.ITEM_NUMBER=b.ITEM_NUMBER 
group by 1,2 
order by 1,2 
+0

非常感謝你的幫助。但還是有一些東西缺失。上面的查詢沒有給出正確的結果 – Koder

+0

增加了對Nik的評論的一些說明,看起來結果集中的最短日期(seven_day_window)不是 – ChrisCamp

+0

問題中預期的結果@ChrisCamp我在我的系統上測試了這一點,結果完全按照要求。你有什麼想法,結果是不正確的? – BellevueBob