按月汇总金额 - sql

时间:2014-07-30 21:19:52

标签: mysql sql tsql aggregate-functions aggregate

我似乎无法弄清楚如何聚合此表。我需要从这个表中弄清楚一个月汇总的金额是多少。所以我有一些项目和每个项目的持续时间,每月平均收入(每个项目)。例如,我想看看2011年5月所有项目的总金额是多少。这是原始表格:

Year    Month   Amount  Duration (month)    average per month
2012    1       7       4                   1.75
2012    2       6       5                   1.2
2012    3       5       6                   0.833333333
2012    4       4       6                   0.666666667
2012    5       9       5                   1.8
2012    6       10      4                   2.5
2012    7       20      3                   6.666666667
2011    4       13      2                   6.5
2011    3       3       10                  0.3
2011    12      4       11                  0.363636364
2011    2       5       12                  0.416666667
2011    3       7       3                   2.333333333
2010    5       8       4                   2
2010    7       3       6                   0.5
2010    9       4       7                   0.571428571
2010    11      5       8                   0.625
2010    1       6       8                   0.75
2010    2       7       8                   0.875
2010    3       8       9                   0.888888889
2010    4       9       1                   9

我将不胜感激任何帮助。感谢。

1 个答案:

答案 0 :(得分:1)

假设年份是varchar和月/持续时间int(如果没有,您可能需要根据需要进行转换),您可以这样做:

select sum(amount) from yourtable
where YearMonth between
period_add(year&'01',month-1) and period_add(year&'01',month+duration-2)

将YearMonth作为要查询的年/月的字符串,在您的示例中为'201105'

多年/月可以创建一列表:

create table yearmonths(yearmonth varchar(6));
insert into yearmonths values
('201101'),('201102'),(201103),
('201104'),('201105'),(201106)

并将其加入您的桌子:

    Select yearmonth,sum(amount)
    from yearmonths y
    left join yourtable t
    on(y.yearmonth between period_add(year&'01',month-1)and period_add(year&'01',month+duration-2)
    group by yearmonth