根据日期间隔汇总值

时间:2015-04-02 14:04:18

标签: mysql sql

我有一个数据库,其中包含某些测量位置的月降水量值。我桌子的结构是:

describe   pp_lunare;
Field      Type       Null
ID         int(11)    NO
DATA_OBS   date       NO
PLUTON     float      NO
LEGHIN     float      NO
DUMBRAVA   float      NO

我的数据样本:

ID    DATA_OBS     PLUTON    LEGHIN   DUMBRAVA
1    1977-01-01    14.4      33.3     25.1
2    1977-02-01    18.7      12.9     13.2
3    1977-03-01    32.8      26.7     18.3
4    1977-04-01    109.6     123.8    140.6
5    1977-05-01    98.5      104.7    59.9
6    1977-06-01    192.9     172.8    66.6
7    1977-07-01    101.4     85.8     79.4
8    1977-08-01    116.4     103.3    105.7
9    1977-09-01    54.5      47.4     51.8
10   1977-10-01    23.6      15.6     11
11   1977-11-01    59.7      44.3     29.7
12   1977-12-01    28.7      13.1     10

在我的情况下,我需要每3个月获得每列的降水量总和:

ID   DATA_OBS      PLUTON    LEGHIN    DUMBRAVA
1    1977-03-01    65.9      72.9      56.6
2    1977-06-01    401       401.3     267.1
3    1977-09-01    272.3     236.5     247.9

依旧......

感谢。

2 个答案:

答案 0 :(得分:0)

您可以使用month(data_obs)从您的日期获取月份,该月份从1到12返回一个月。通过执行floor((month(data_obs) - 1)/3) as quarter之类的操作将此值转换为该季度的值,以获得从0到3的季度

例如,select data_obs, concat(year(data_obs), floor((month(data_obs) - 1)/3)) as quarter from pp_lunare;应该同时显示原始日期和派生季度。

然后按这个新值分组并总结其余部分:

select concat(year(data_obs), floor((month(data_obs) - 1)/3)) as quarter, sum(pluton), sum(leghin), sum(dumbrava)
from pp_lunare
group by quarter
order by quarter;

如果你想要问题中的确切日期格式,你将需要进行一些字符串操作(在上面的四分之一处添加1,将其乘以3,填充0,然后添加到“ -01“为日期)。

答案 1 :(得分:0)

您可以先获取月份数据,然后将其转换为[quarter],即0到2。 然后你可以创建三个临时表给出[quarter] = 0,1,2, 简单和最后的部分将是在这些表中添加第i行,结果将如下所示。您也可以获得data_obs数据。

ID DATA_OBS PLUTON LEGHIN DUMBRAVA 1 1977-03-01 65.9 72.9 56.6 2 1977-06-01 401 401.3 267.1 3 1977-09-01 272.3 236.5 247.9