SQL-集团及;按日期计算的金额
我对使用SQL查询特定场景有点执着 假设我们有以下数据SQL-集团及;按日期计算的金额,sql,oracle,oracle11g,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 2
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
我想按以下方式对数据进行分组和求和
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
我没有oracle,因此无法检查语法,但以下是大致逻辑:
select d1, least(d2-d1, 3) as type, count(*), sum(...)
from table
group by d1, least(d2-d1, 3)
所以,这里的逻辑是计算日期和分组之间的差异
要覆盖我们使用的最少的分支(d2>d1+3),您可以通过添加附加条件来扩展给定的查询,这应该是可行的。如果您遇到任何问题,请告诉我
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
这是我认为查询应该包含
d1
,因为第一个字段是prolem解析的吗?