日期:从第2天到下个月第1天逐个月

时间:2012-04-03 20:48:51

标签: mysql date group-by

我有这样的查询:

SELECT EXTRACT(MONTH FROM d.mydate) AS synmonth, SUM(apcp) AS apcptot
FROM t_synop_data2 d
WHERE d.mydate
BETWEEN '2011-01-01' AND '2011-12-31' 
AND d.idx_synop = '06712'
GROUP BY synmonth

此查询在一个月内添加所有降雨(apcp),如下所示:

1   32.8  => from 2011.01.01 to 2011.01.31
2   27.2 => from 2011.02.01 to 2011.02.28
3   21.0
4   21.8
5   88.5
6   131.4
7   118.6
8   57.1
9   80.9
10  84.6
11  1.1
12  143.5 => from 2011.12.01 to 2011.12.31

这就是我想要的,但有点不同。

这个区别在于我必须在下个月从第2天到第1天添加apcp,然后返回上面的结果。

1   132.8 => from 2011.01.02 to 2011.02.01
2   27.2  => from 2011.02.02 to 2011.03.01
3   21.0
4   21.8
5   88.5
6   131.4
7   118.6
8   57.1
9   80.9
10  84.6
11  1.1
12  143.5 => from 2011.12.02 to 2012.01.01

我尝试使用add_date(),extract()或date_format()但没有结果。

感谢您的回答 文斯

2 个答案:

答案 0 :(得分:1)

以下是查询:

SELECT EXTRACT(MONTH FROM ADDDATE(d.mydate,-1) ) AS synmonth
, SUM(apcp) AS apcptot
FROM t_synop_data2 AS d
WHERE ADDDATE(d.mydate,-1) BETWEEN '2011-01-01' AND '2012-12-31'
AND d.idx_synop = '06712'
GROUP BY synmonth

您可以通过添加两列来检查结果:

SELECT EXTRACT(MONTH FROM ADDDATE(d.mydate,-1) ) AS synmonth
, SUM(apcp) AS apcptot
, MIN(d.mydate) AS date_min
, MAX(d.mydate) AS date_max
FROM t_synop_data2 AS d
WHERE ADDDATE(d.mydate,-1) BETWEEN '2011-01-01' AND '2012-12-31'
AND d.idx_synop = '06712'
GROUP BY synmonth

答案 1 :(得分:0)

您可以按EXTRACT(MONTH FROM d.mydate - INTERVAL 1 DAY)

进行分组
SELECT EXTRACT(MONTH FROM d.mydate) AS synmonth, SUM(apcp) AS apcptot
FROM t_synop_data2 d
WHERE d.mydate
BETWEEN '2011-01-01' AND '2011-12-31' 
AND d.idx_synop = '06712'
GROUP BY EXTRACT(MONTH FROM d.mydate - INTERVAL 1 DAY)