mysql - 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 日的销售额。因此返回的表将包含多行日期
解决方案
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
推荐阅读
- c++ - 使用“基于数组的 K 个元素排序”算法的数组中的第 K 个最大数
- mongodb - 如何按多个对象元素分组
- node.js - 为两个任务使用一个模式
- ios - iOS 13 NSAttributedString NSKeyedArchiver.archivedData 丢失属性
- python - AttributeError:模块“pandas.compat”没有属性“iteritems”
- list - 需要比较列表中可用的日期
- ruby-on-rails - Rails 应用程序的部署:在第一次部署期间应该如何加载和填充数据库?
- c# - RestSharp - 带有“$”响应属性名称的 GET 请求
- google-bigquery - 如何在 BigQuery TIMESTAMP 字段上使用 LIKE 运算符
- docker - 如何将应用程序容器连接到 mysql 容器