上个月的差异和oracle sql的去年末差异

时间:2014-11-26 09:42:52

标签: oracle

我需要编写一个查询来计算上个月末和月末之间的差异以及去年末和月末之间的差异。我在sqlfiddle中创建了示例数据库http://sqlfiddle.com/#!4/b9749 在我的数据库中,最重要的日期始终是月末,但正如您在样本中看到的那样,还有其他日期,但我不能使用这些日期的值。当我使用condidtion运行此查询时,date ='2014-04-30'结果应如下所示:

date        product    amount     last_month_diff     last_year_end_diff
2014-04-30       a1       350                -150                    650
2014-04-30       b1       123                -123                   1877

当我使用condidtion运行此查询时,date ='2014-05-31'结果应该是这样的

date        product    amount     last_month_diff     last_year_end_diff
2014-05-31       a1       400                 -50                    600
2014-05-31       b1       500                -377                   1500
2014-05-31       c1       200                   0                      0

当我使用condidtion运行此查询时,date ='2014-06-30'结果应该是这样的

date        product    amount     last_month_diff     last_year_end_diff
2014-06-30       b1       780                -280                   1220
2014-06-30       c1       100                 100                      0

起初我以为我使用分析函数(滞后),但我可能在两个月末之间有很多日期,我不知道如何达到预期的结果。

1 个答案:

答案 0 :(得分:0)

尝试类似下面的东西。

with input_date as (select to_date('2014-04-30', 'YYYY-MM-DD') d from dual),
sot_tot as (select product, 
                   sum(case when extract(month from date_) = extract(month from d) then amount else 0end) amount,       
                   sum(case when extract(month from date_) = extract(month from last_day(add_months(d, -1))) then amount else 0 end) previous_month_amount
            from sot, input_date
            where date_ <= d
            group by product)

select product, amount, previous_month_amount - amount as previos_month_diff
  from sot_tot

我无法理解你的意思difference between last month-end and month-end and difference between last year-end and month-end.但是解决方案与上面的解决方案非常相似,你可以使用总和和案例组合来达到你想要的结果。