表内所存的数据的时间间隔为5分钟,地点代码   总数量       开始时间     
4000001    0            2010-1-6 17:00:00
4000001    200          2010-1-6 17:05:00
4000001    300          2010-1-6 17:10:00
4000001    100          2010-1-6 17:15:00
4000001    150          2010-1-6 17:20:00
4000001    101          2010-1-6 17:25:00
4000001    202          2010-1-6 17:30:00
4000001    220          2010-1-6 17:35:00

.....      ...            ......现因报表需要,需要将表内的数据按15分钟的间隔或30分钟的间隔统计出来,如果不用存储过程,SQL语句能实现吗?
想要的结果集如下:地点代码   总数量       开始时间     
4000001      0          2010-1-6 17:00:00
4000001    600          2010-1-6 17:15:00
4000001    453          2010-1-6 17:30:00
.......    ...           .....

解决方案 »

  1.   

    select 地点代码,sum(总数量),trunc(开始时间,'hh')+ceil((开始时间-trunc(开始时间,'hh'))/15*1440)/1440*15
    from table1
    group by 地点代码,trunc(开始时间,'hh')+ceil((开始时间-trunc(开始时间,'hh'))/15*1440)/1440*15
    order by 1,3;
      

  2.   

    t2为测试表,可自动获取第一条记录为开始时间SELECT code, total, atime
      FROM t2
     WHERE t2.total = 0
    UNION ALL
    SELECT code, total, (SELECT MIN(t2.atime) FROM t2) + (grp + 1) * 15 / 1440 AS atime
      FROM (SELECT t.code, trunc(to_number(to_char(atime, 'mi')) / (15+1), 0) AS grp, SUM(total) total
              FROM t2 t
             GROUP BY t.code, trunc(to_number(to_char(atime, 'mi')) / (15+1), 0));
      

  3.   

    SELECT SUM(总数量), ceil(rownum / 3)
      FROM (SELECT * FROM test ORDER BY 开始时间) t
     GROUP BY (ceil(rownum / 3))