码迷,mamicode.com
首页 > 数据库 > 详细

DB2日期分组计算数据值

时间:2014-08-28 09:52:29      阅读:286      评论:0      收藏:0      [点我收藏+]

标签:style   io   for   ar   数据   2014   问题   sp   时间   

最近参与的项目进行了一次优化技改,对其中SQL参数化公用方法进行了改造。又因项目组人员调整,接受其他模块。针对这次改造,自己负责的模块都要测试到底。

然后再测试过程发现,一个针对日期分组计算的SQL报错,报SQL语句超长的异常。

举个栗子,功能要求如下:

表table_test中

ID           AMOUNT         CREATE_DATE

1            100                   2014-01-01

2            100                   2014-01-09

3            100                   2014-01-11

4            100                   2014-01-12

5            100                   2014-01-21

6            100                   2014-01-22

7            100                   2014-01-24

从表中按CREAT_DATE每10天作为一个分组,统计总金额

之前的SQL是这样的

SELECT SUM(AMOUT) AS TOTALAMOUNT FORM TABLE_TEST 
WHERE CREATE_DATE BETWEEN ‘2014-01-01‘ AND ‘2014-01-10‘
UNION ALL
SELECT SUM(AMOUT) AS TOTALAMOUNT FORM TABLE_TEST 
WHERE CREATE_DATE BETWEEN ‘2014-01-11‘ AND ‘2014-01-20‘
UNION ALL
SELECT SUM(AMOUT) AS TOTALAMOUNT FORM TABLE_TEST 
WHERE CREATE_DATE BETWEEN ‘2014-01-21‘ AND ‘2014-01-30‘

这样的问题是,一方面程序逻辑更负责,需要算计每10天时间间隔的起始日期,还一个一个方面SQL语句冗长,日期跨度大的话,就明显了,直接导致程序抛异常。

下面是改进的SQL

SELECT SUM(AMOUNT) AS TOTALAMOUNT , (days(CREATE_DATE)-days(‘2014-01-01‘))/10 AS TIMESAPN 
FROM TABLE_TEST GROUP BY TIMESAPN

关键点是

(days(CREATE_DATE) - days(‘2014-01-01‘))/10 AS TIMESAPN

TIMESAPN为0则表示该记录在第一个10天周期内,为1表示在第二个10天周期内,以此类推,最后以此字段作为分组条件,就可以达到上面SQL同样的效果。




DB2日期分组计算数据值

标签:style   io   for   ar   数据   2014   问题   sp   时间   

原文地址:http://my.oschina.net/sevenhdu/blog/307423

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!