【问题标题】:Teradata - Group by date rageTeradata - 按日期范围分组
【发布时间】:2013-06-12 16:03:51
【问题描述】:

我有这种情况,其中必须汇总属于特定日期范围(每 7 天)内的每个项目的采购订单。

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

上述记录必须汇总到关于ITEM的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

如果这是重复,请道歉。 提前致谢!

【问题讨论】:

    标签: sql teradata


    【解决方案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
    

    【讨论】:

    • 非常感谢您的帮助。但是仍然缺少一些东西。上面的查询没有给出正确的结果
    • 为 Nik 的评论添加一些说明,结果集中的最小日期 (seven_day_window) 似乎不是问题中的预期
    • @ChrisCamp 我在我的系统上进行了测试,结果完全符合要求。你知道结果不正确的地方吗?
    猜你喜欢
    • 2013-05-19
    • 2013-11-04
    • 2021-11-16
    • 2010-10-31
    • 2016-09-22
    • 2019-02-19
    • 2019-02-14
    相关资源
    最近更新 更多