MySQL 中的同比变化或上一年的值

Posted

技术标签:

【中文标题】MySQL 中的同比变化或上一年的值【英文标题】:Year-Over-Year Change or Previous Year Values in MySQL 【发布时间】:2021-06-14 13:50:20 【问题描述】:

我有一张看起来像这样的表

Date Number of products Department Sub-Department
01-01-2019 10 A Ax
01-01-2019 4 A Ay
02-01-2019 14 B By
02-01-2019 15 A Ay

该表包含 2018 年至今的数据。对于每个日期,每个部门和子部门都有多行。

我想创建一个列来告诉我一年前的产品数量,按日期、部门、子部门和我拥有的其他列分组。

【问题讨论】:

您对示例数据的预期结果集是什么?到目前为止,您尝试过什么? @DavidDenenberg 预期的结果将是完全相同的表,其中有一个额外的列,其中包含上一年产品数量的值。直到现在我一直在寻找解决方案,但是他们中的大多数都有一个月或一年级别的数据,所以他们使用滞后窗口函数来获取值。 你的日期格式是什么?我什至无法判断数据的含义。 【参考方案1】:

假设第一列是日期,可以使用窗口函数:

select date, department, sub_department, num_products,
       max(num_products) over (partition by department, sub_department
                               order by date
                               range between interval 1 year preceding and interval 1 year preceding
                              ) as num_products_1_year_ago
from t;

【讨论】:

以上是关于MySQL 中的同比变化或上一年的值的主要内容,如果未能解决你的问题,请参考以下文章

Angular 2如何防止订阅触发,除非map返回的两个值中的任何一个发生了变化

我想在列中的值中添加“%”单位

如何从 QMultiMap 中的值中获取键?

在 PHP 中的 textarea 值中换行

使用猫鼬模式将多个选择元素值中的值存储到MongoDB中的数组中

尝试从数组中的值中删除基于 MKMap 的引脚