mysql - 从上个月的价格变化表中获取最近 2 个更新的 unit_price
问题描述
我有一张表,它记录了每个 cost_price、unit_price 和 special_price 上项目的所有价格变化。即使其中一种定价从旧定价改变,该表也会记录数据。表结构示例如下所示。
id | item_id | cost_price | unit_price | special_price | created_date
---------------------------------------------------------------------------
1 | 101 | 100 | NULL | NULL | 2018-07-15 10:02:20
2 | 102 | NULL | 250 | NULL | 2018-07-16 12:23:00
3 | 101 | NULL | 150 | NULL | 2018-07-16 10:02:20
4 | 101 | NULL | 200 | NULL | 2018-07-18 12:23:00
5 | 101 | NULL | 201 | NULL | 2018-07-22 10:02:20
6 | 102 | NULL | 283 | NULL | 2018-07-28 12:23:00
我想从上表(日期为 13-07-2018)中获取上个月的以下输出
item_id | unit_price | changed_date
-----------------------------------------
101 | 201 | 2018-07-22 10:02:20
101 | 200 | 2018-07-18 12:23:00
102 | 283 | 2018-07-28 12:23:00
我需要上面的输出,它只显示unit_price发生的最后两个变化。
解决方案
这可能看起来很复杂:
SELECT t1.item_id,t1.unit_price,t1.created_date AS changed_date
FROM table_name t1 INNER JOIN
(
SELECT a.item_id, a.unit_price, MAX(a.created_date) AS changed_date
FROM table_name a INNER JOIN
(SELECT item_id, unit_price, MAX(created_date) AS changed_date
FROM table_name GROUP BY item_id, unit_price) b
ON a.item_id = b.item_id and a.created_date < b.changed_date
GROUP BY a.item_id, a.unit_price
) t2
ON t1.item_id = t2.item_id AND t1.created_date >= t2.changed_date
推荐阅读
- javascript - 如何验证具有多个选项卡的表单?
- angular - Angular - RxJS - Observable 和方法返回
- amazon-web-services - 访问 S3 中数据的权限不足 - AWS
- html - 背景过滤器会导致字体上不需要的“抗锯齿”
- amazon-web-services - EC2实例向外发出请求时如何查找EC2实例使用的IP地址
- mysql - 尝试将变量作为表名和值插入时出现 mysql 语法错误
- javascript - 带有循环的 Promise.all() 并将结果同时存储到 Javascript 中的 JSON 对象
- .net - 在 WinDbg 中从 .NET 1.1 内存转储中转储所有字符串
- javascript - 如何防止 React 重新渲染?
- android - 使用 arraylist 将数据添加到微调器中,而不是在 addChildEventListener 的 onChildChanged() 中更新