SQL - group&总和基于日期

时间:2014-06-02 04:28:01

标签: sql oracle oracle11g

我很难停止使用SQL查询特定场景。

说我们有以下数据

d1 - Date
d2 - Date
count - number
sum - number

    d1       d2   count     sum
20-May-14,20-May-14,117.00,201452.45
20-May-14,21-May-14,36.00,72966.37
20-May-14,22-May-14,23,30599.99
20-May-14,23-May-14,9.00,3012345.11
20-May-14,24-May-14,4,2750.46
20-May-14,25-May-14,2,2391.59
20-May-14,26-May-14,11.00,34625.52
20-May-14,27-May-14,2,2891.59
20-May-14,28-May-14,5,6188.79
21-May-14,21-May-14,84.00,192357.77
21-May-14,22-May-14,21,52805.22
21-May-14,23-May-14,13,27730.85
21-May-14,24-May-14,11.00,40361.32
21-May-14,25-May-14,4.00,7431.79
21-May-14,26-May-14,7.00,19903.92
21-May-14,27-May-14,4,6160.74
21-May-14,28-May-14,7.00,11905.57

我想以下列方式对数据进行分组和汇总

  1. 数& d1 = d2时的总和(d1当天,例如:d1 = 20-May-14,d2 = 20-May-14)

  2. 数& d2 = d1 + 1时的总和(d1的下一天,例如:当d1 = 20-May-14,d2 = 21-May-14时)

  3. 数& d2 = d1 + 2时的总和(d1的第二天后的天数,例如:当d1 = 20-May-14,d2 = 22-May-14时)

  4. 数&当d2> d1 + 3(总数 - 大于d1的第二天之后的天,例如:当d1 = 20-May-14,d2> = 23-May-14)时,总和

  5. 我目前正在使用个别条件根据上述结果集查询非常大的数据库并手动合并结果。

    是否可以查询数据并从表中获取结果作为以下综合信息:

    d1,count(d2=d1),sum(d2=d1),count(d2=d1+1), sum(d2=d1+1), count(d2=d1+2),sum(d2=d1+2),count(d2>=d1+3),sum(d2>=d1+3)
    20-May-14,117,201452.45,36,72966.37,23,30599.99,33,3061193.06
    21-May-14,84,192357.77,21,52805.22,13,27730.85,33,85763.34
    

2 个答案:

答案 0 :(得分:1)

您好,您可以通过添加additiobnal条件扩展给定的查询,这应该工作。如果您遇到任何问题,请告诉我

select d1,SUM(case 
               when d1=d2 then cnt 
              end
           )  as count_d1_d2,
         SUM(case 
              when d1=d2 then sm 
             end
             ) as  SUM_d1_plus_d2,
         SUM(case 
               when d2=d1+1 then cnt 
              end
           )  as count_d1_d2_1,
         SUM(case 
              when d2=d1+1 then sm 
             end
             ) as  SUM_d1_d2_1

from test
group by d1

以下是Fiddle

答案 1 :(得分:0)

我没有oracle所以我无法检查语法,但这里是近似逻辑:

select d1, least(d2-d1, 3) as type, count(*), sum(...)
from table
group by d1, least(d2-d1, 3)

所以,这里的逻辑是计算日期和组之间的差异

覆盖分支,其中(d2> d1 + 3)我们最少使用