首页 > 解决方案 > MYSQL按同一工作日比较上一年

问题描述

我有一系列的销售交易。我想创建一个 MySql 查询,该查询将按日期对销售交易进行分组,但也有一列显示最近工作日的上一年销售额。

我知道我可以使用 DATE_ADD 来获取正确的日期。例如,下面的公式将给出我想要的与 2020 年 3 月 1 日相关的日期:

DATE_ADD('2020-03-01', INTERVAL -52 WEEK)

以上返回2019年3月3日。但我不知道如何将数据变成这样:

+-----------+---------+
|Date       | Sales   |
|-----------+---------+
|2020-03-01 | 45.00   |
|2020-03-01 | 1.23    |
|2020-03-01 | 30.00   |
|2020-03-01 | 5.75    |
|2020-03-01 | 25.63   |
|2020-02-29 | 85.85   |
|2020-02-29 | 26.23   |
|2020-02-29 | 56.85   |
|2020-02-29 | 8.96    |
|2020-02-29 | 89.48   |
.
.
.
.
|2019-03-03 | 3.50    |
|2019-03-03 | 76.89   | 
|2019-03-03 | 1003.50 |
|2019-03-03 | 1.34    |
|2019-03-02 | 6.58    |
|2019-03-02 | 90.48   | 
|2019-03-02 | 32.12   |
|2019-03-02 | 45.89   |
|2019-03-02 | 353.21  |
|2019-03-02 | 3.71    | 
|2019-03-02 | 22.22   |
|2019-03-02 | 353.65  |
.
.
.
.
+-----------+---------+

变成这样的表:

+-----------+--------------+--------------+
|Date       | Curr Sales   | Last Yr Sales|
|-----------+--------------+--------------+
|2020-03-01 | 107.61       | 1085.23      |
+-----------+--------------+--------------+
|2020-02-29 | 267.37       | 907.86       |
+-----------+--------------+--------------+
.
.
.

该数据包含可追溯到 2015 年的一年中几乎每一天的销售额,而不仅仅是 2020 年 3 月 1 日的销售额。因此返回的表将包含多行日期

标签: mysqlsqlgroup-bysumpivot

解决方案


select t1.date, t1.Sales as 'Curr Sales', t2.sales as 'Last Yr Sales'
from(
    SELECT Date, Sum(Sales) as sales
    from table1 
    group by date
) t1
left join(
    SELECT Date, Sum(Sales) as sales
    from table1 
    group by date
) t2
on DATE_SUB(t1.date, INTERVAL 52 WEEK) = t2.date
where t1.date >= '2020-01-01'
order by t1.date desc

推荐阅读