SQL如何查找表中字段最后一次更新值对应的记录
SQL查询字段最后一次更新对应记录的解决方案
核心思路
首先识别相邻日期的同产品库存值变化,筛选出所有发生值变动的记录,再取最新的一条即可。
方法1:窗口函数实现(支持MySQL 8.0+、PostgreSQL、Oracle等现代数据库,性能更优)
WITH stock_with_prev AS ( SELECT `entry date`, Product, Stock, -- 按产品分组,按日期排序,取上一条记录的库存值 LAG(Stock) OVER (PARTITION BY Product ORDER BY `entry date`) AS prev_stock FROM 你的实际表名 ), stock_change_records AS ( SELECT `entry date`, Product, Stock FROM stock_with_prev -- 第一条记录无前置值,本身属于初始更新,也需纳入 WHERE prev_stock IS NULL OR Stock != prev_stock ) -- 取最后一次更新的记录 SELECT * FROM stock_change_records ORDER BY `entry date` DESC LIMIT 1;
上述SQL运行后会返回示例数据中2021-01-02对应的记录,符合预期结果。如果需要查询多个产品的最后一次更新记录,只需去掉LIMIT 1,再对Product分组取最大日期即可。
方法2:自连接实现(兼容不支持窗口函数的低版本数据库)
SELECT t1.* FROM 你的实际表名 t1 LEFT JOIN 你的实际表名 t2 ON t1.Product = t2.Product AND t2.`entry date` = DATE_ADD(t1.`entry date`, INTERVAL 1 DAY) -- 筛选库存发生变化的日期,或最新日期(若最新日期后无新记录) WHERE t1.Stock != t2.Stock OR t2.`entry date` IS NULL ORDER BY t1.`entry date` DESC LIMIT 1;
注意:使用前请将代码中的
你的实际表名替换为真实的表名。
内容的提问来源于stack exchange,提问作者Nonagon
相关产品推荐
相关产品推荐

