如何在MySQL中获取每个脚本的最新运行记录?
解决方案
你的需求是获取每个script对应的最新lastRun记录,之前的查询方法存在问题:
DISTINCT会对script、lastRun、processed三个字段的组合去重,由于每条记录的lastRun都不同,所以会返回所有记录。GROUP BY script在MySQL非严格模式下,会返回每个分组的随机一条记录,无法保证是最新的lastRun对应的记录。
以下两种方法可以实现需求:
方法1:子查询关联(兼容所有MySQL版本)
先通过子查询找出每个script的最大lastRun,再关联原表获取完整记录:
SELECT t.script, t.lastRun, t.processed FROM your_table t INNER JOIN ( SELECT script, MAX(lastRun) AS max_lastRun FROM your_table GROUP BY script ) t_max ON t.script = t_max.script AND t.lastRun = t_max.max_lastRun ORDER BY t.lastRun ASC;
方法2:窗口函数(MySQL 8.0及以上版本可用)
使用ROW_NUMBER()窗口函数,按script分组后以lastRun倒序排序,取每组的第一条(即最新记录):
SELECT script, lastRun, processed FROM ( SELECT script, lastRun, processed, ROW_NUMBER() OVER (PARTITION BY script ORDER BY lastRun DESC) AS rn FROM your_table ) t WHERE rn = 1 ORDER BY lastRun ASC;
注意:将上述语句中的your_table替换为你的实际表名。
内容的提问来源于stack exchange,提问作者bart2puck
相关产品推荐
相关产品推荐

