Mysql 相应地获取会计年度和组SQL结果的总和

Mysql 相应地获取会计年度和组SQL结果的总和,mysql,sql,Mysql,Sql,我使用以下代码创建表: CREATE TABLE PaL ( country TEXT, Day DATE, Revenue CHAR(255), Costs CHAR(255) ); INSERT INTO PaL (country, Day, Revenue, Costs) VALUES ("DE", "2017-01-31", "5600", "-3000"), ("DE", "2017-02-28", "3900", "-1550"), ("D

我使用以下代码创建表:

 CREATE TABLE PaL (
    country TEXT,
    Day DATE,
    Revenue CHAR(255),
    Costs CHAR(255)
);


INSERT INTO PaL 
(country, Day, Revenue, Costs)
VALUES

("DE", "2017-01-31", "5600", "-3000"),
("DE", "2017-02-28", "3900", "-1550"), 
("DE", "2017-03-31", "4100", "-2200"),
("DE", "2017-04-30", "7200", "-5000"),
("DE", "2017-05-31", "5300", "-4000"),
("DE", "2017-06-30", "8800", "-6550"), 
("DE", "2017-07-31", "1120", "-500"),
("DE", "2017-08-31", "5000", "-3250"),
("DE", "2017-09-30", "2600", "-1225"),
("DE", "2017-10-31", "9200", "-8350"), 
("DE", "2017-11-30", "5100", "-2995"),
("DE", "2017-12-31", "3950", "-3400"),

("DE", "2018-01-31", "7840", "-6985"),
("DE", "2018-02-28", "9358", "-1452"), 
("DE", "2018-03-31", "2225", "-1655"),
("DE", "2018-04-30", "3820", "-2950"),
("DE", "2018-05-31", "9587", "-8500"),
("DE", "2018-06-30", "3000", "-2785"), 
("DE", "2018-07-31", "5450", "-4500"),
("DE", "2018-08-31", "3800", "-2650"),
("DE", "2018-09-30", "9000", "-7456"),
("DE", "2018-10-31", "7780", "-6900"), 
("DE", "2018-11-30", "6585", "-5450"),
("DE", "2018-12-31", "1280", "-850"),

("DE", "2019-01-31", "6585", "-5450"),
("DE", "2019-02-28", "1280", "-850");
然后我使用以下代码查询it收入:

Select country, sum(Revenue)
From Pal
Where Day Between '2017-03-01' AND '2017-02-28'
Group By country
您还可以在SQL FIDLE中找到所有内容
到目前为止,所有这些都很有效


但是,我的目标是最终的SQL结果如下所示:

 Fiscal Year      Country                    Values
    2017            DE          Sum from 2017-03-01 - 2018-02-28
    2018            DE          Sum from 2018-03-01 - 2019-02-28

我必须在代码中更改什么才能得到所需的结果?

您可以通过减去2个月并提取年份来计算会计年度。因此:

Select year(day - interval 2 month) as fy,
      country, sum(Revenue)
From Pal
Group By fy, country

你究竟为什么把数字存储为
char(255)
?整数有什么问题?假设有两个字母的ISO代码,
country
可能应该是一个
varchar(2)
。谢谢Gordon,工作得很好:-)您是否也知道如何将汇总包含在函数中,这样列的总和只显示一次,而不是每年显示一次。请参见此处的SQL fiddle:请注意,会计年度是由其结束日期而非开始日期定义的,因此,如果您将年(天-间隔2个月)+1作为fy,它将更精确correct@Joakim丹尼尔森:这一点很好,但我认为这取决于你们公司对它的定义。如果2017财年指定为日历年2017年3月1日至2018年2月28日,则Gordon的解决方案是正确的。如果2018财年指定为日历年2017年3月1日至2018年2月28日,那么您的解决方案是正确的选择。我在这里向SQL fiddle添加了两种方式:@JoakimDanielson。其实不是。2017财年定义为“2017-03-01-2018-02-28的总和”。在任何情况下,
+1
都不会真正改变答案。