Sql Teradata-按日期分组
我有一个场景,在这个场景中,属于特定日期范围(每7天)的每个项目的采购订单都必须聚合Sql Teradata-按日期分组,sql,teradata,Sql,Teradata,我有一个场景,在这个场景中,属于特定日期范围(每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/
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
如果这是重复,请道歉。
提前谢谢 这里有一个可能的解决方案:
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
以下是一种可能的解决方案:
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的评论进行澄清,结果集中的最小日期(七天窗口)似乎不是预期的结果question@ChrisCamp我在我的系统上进行了测试,结果完全符合要求。你知道结果有什么不正确的地方吗?非常感谢你的帮助。但是仍然缺少一些东西。上面的查询没有给出正确的结果。为了对Nik的评论进行澄清,结果集中的最小日期(七天窗口)似乎不是预期的结果question@ChrisCamp我在我的系统上进行了测试,结果完全符合要求。你知道结果在哪些方面是不正确的吗?