Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/84.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL-集团及;按日期计算的金额_Sql_Oracle_Oracle11g - Fatal编程技术网

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

我对使用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
我想按以下方式对数据进行分组和求和

  • d1=d2时的计数和求和(d1日,例如:d1=2014年5月20日,d2=2014年5月20日)

  • d2=d1+1时的计数和求和(d1的第二天,例如:d1=2014年5月20日,d2=2014年5月21日)

  • d2=d1+2时的计数和求和(d1第二天之后的第二天,例如:d1=2014年5月20日,d2=2014年5月22日)

  • d2>d1+3时的计数和求和(总计-大于d1的第二天,例如:d1=2014年5月20日,d2>=2014年5月23日)

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

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

    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解析的吗?