首页 > 解决方案 > 从上个月的价格变化表中获取最近 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发生的最后两个变化。

标签: mysqlsqlquery-optimization

解决方案


这可能看起来很复杂:

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

推荐阅读