我有一张桌子:
Month Data1 Data2
Jan-17 2 3
Feb-17 3 4
Mar-17 2 3
Apr-17 4 1
May-17 1 2
输出应为:
Month Data
Jan-17 Data2(Jan)+Data2(Feb)+Data2(Mar)(3+4+3)
Feb-17 Data1(Jan)+Data2(Feb)+Data2(Mar)(2+4+3)
Mar-17 Data1(Jan)+Data1(Feb)+Data2(Mar)(2+3+3)
季度从1月开始,如果月份是季度的第一个月,则第一个月的产量应该是:第一个月的数据1和未来2个月的数据2
如果月份是季度的第2个月,则输出应为上个月的Data1和第2个月的data2 +第3个月的data2
如果月份是季度的第3个月,则第3个月的输出应为第一个月的Data1 +第2个月的Data1 +第3个月的Data2。
我正在使用oracle数据库。 有人可以帮忙。
答案 0 :(得分:2)
您需要这样的查询。确保在未来日期或过去日期缺少记录时包括Data1,Data2的NULL
检查,并在必要时将其默认为零。
select To_CHAR(Month,'MON-YY') Month,
CASE
WHEN MOD ( EXTRACT ( MONTH FROM Month ), 3 ) = 1
THEN Data2 + LEAD ( Data2 ,1) OVER ( ORDER BY Month ) + LEAD ( Data2 ,2) OVER ( ORDER BY Month )
WHEN MOD ( EXTRACT ( MONTH FROM Month ), 3 ) = 2
THEN LAG(Data1,1) OVER ( ORDER By Month ) + Data2 + LEAD ( Data2 ,1) OVER ( ORDER BY Month )
WHEN MOD ( EXTRACT ( MONTH FROM Month ), 3 ) = 0
THEN LAG(Data1,2) OVER ( ORDER By Month ) + LAG(Data1,1) OVER ( ORDER By Month )+Data2
END data
FROM
Table1;