根据sql中的四分之一月份获取数据

时间:2017-11-25 05:33:49

标签: sql database oracle plsql

我有一张桌子:

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数据库。 有人可以帮忙。

1 个答案:

答案 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;

SQLFiddle