【发布时间】:2019-12-01 16:59:48
【问题描述】:
我想知道是否有一种有效的方法来对特定重叠时间范围的数据进行分组。我掌握这个练习的主要目标是查询这张表:
transaction_date | item_type | profit
'dd/mm/yy' "" ''
示例:
transaction_date | item_type | profit
03/01/2018 Book 2
03/05/2018 Book 5
04/05/2018 Book 6
03/06/2018 Misc. 20
并获得
(1) 按周和年分组,因此查询具有 year | 列日期
这已经成功完成,只需使用 group by 和以下几行
to_char(transaction_date, 'YY'), to_char(transaction_date, 'WW')
其中,与 item_type 和利润的其他一些期望的分组一起,给出了
year | week | item_type | profit
18 17 Book 2
18 18 Book 11
18 22 Misc 20
(2) 一个附加列,包含过去 4 周的利润(如果条目是在第 7 周,这将是第 3-6 周的总计,而不是正好 4 周前。)
year | week | item_type | profit | profit_last4wks
18 17 Book 2 0
18 18 Book 11 2
18 22 Misc 20 0
这一步就是问题,因为我目前对如何处理它以及从哪里开始作为第一步感到非常困惑。任何建议或正确方向的观点都会非常有帮助。
我的想法是在单独的查询中执行步骤 (1) 和 (2) 然后加入,但甚至获得 (2) 分别让我难住了。我还认为可以先获取 (1),然后以某种方式附加所需的列。
【问题讨论】:
-
样本数据和期望的结果真的会有所帮助。
-
看来您不仅仅按周分组(按年份和周数标识),还按 item_type 分组。 (如果您将任何给定周的所有项目类型组合在一起,那么您将不会在输出中包含 item_type)。请澄清。
-
还有什么在一年的第一周展示?应该是去年最后4周价格的总和吗?
-
@mathguy,是的,抱歉,它也被分组为 item_type、利润(理想情况下是 profit_last4wks),我会澄清一下。
-
@Tejash,没错。虽然现在想起来,WK53只有一两天,所以理想情况下应该加入WK52
标签: sql oracle group-by overlap