【发布时间】:2019-12-20 08:13:02
【问题描述】:
我有一个三列的表格:
id | created_at | original_id
a1 | 2019-12-10 | a
a2 | 2019-12-12 | a
a3 | 2019-12-11 | a
b1 | 2019-12-10 | b
b2 | 2019-12-09 | b
我想在所有具有相同 original_id 的行中查找具有最大 created_at 的所有行的 id
(背景:该表存储一个元素的“历史”,因此每次更改或删除时,都会创建一个新的历史条目。我想知道最新历史条目的ID每个元素/每个 original_id)
所以我对上述示例数据的预期结果是:
id | MAX(created_at) | original_id
a2 | 2019-12-12 | a
b1 | 2019-12-10 | b
我尝试了几种使用子查询和分组依据的方法,但我无法真正获得分组依据内的最大值
SELECT a.id, a.original_id, a.created_at FROM notes.test AS a
WHERE a.created_at = (SELECT MAX(b.created_at)
FROM notes.test AS b
WHERE b.original_id = a.original_id)
在我弄清楚如何用 sql 编写这个查询之后,我还需要将它与 Java-Spring-Repository 一起使用,所以也欢迎任何关于如何实现它的想法
【问题讨论】:
-
您的查询工作正常,您只需要将表别名添加到
test的第一个实例,即SELECT a.id, a.original_id, a.created_at FROM test asqlfiddle.com/#!9/af76c/2 -
我同意@nick 的说法,查询工作正常。见sqlfiddle.com/#!9/4bdd3d/1
-
是的,我也发现了^^非常感谢您的帮助!