我有一个名为“history”的表,下面有一些示例数据:
SITE_ID TARGET_PRIMARY_KEY TARGET_TABLE UPDATED_AT USER_ID
1 1025test 4 2018/10/25 12:01 e4
1 1025test 4 2018/10/25 12:02 e1
1 1025test 4 2018/10/25 12:03 e2
1 1025test 4 2018/10/25 12:04 e3
1 aaa 4 2018/10/19 15:01 e1
5 aaa 7 2018/10/19 15:02 e2
1 aaa 4 2018/10/19 15:03 e3
1 aaa 4 2018/10/19 15:04 e4
1 aaa 4 2018/10/19 15:05 e5
1 aaa 4 2018/10/19 15:06 e6
我想要实现的是:
对于
"SITE_ID"
和"TARGET_PRIMARY_KEY"
的每个唯一组合,选择具有最大(最新)值"UPDATED_AT"
的记录。还要确保相应的
"USER_ID"
是正确的。预期结果是:
1 1025test 4 2018/10/25 12:04 e3
1 aaa 4 2018/10/19 15:06 e6
我尝试了以下SQL:
SELECT
hist.SITE_ID AS siteId,
TARGET_PRIMARY_KEY AS skey,
hist.TARGET_TABLE AS targetTable,
MAX(UPDATED_AT) AS lastActionDate,
hist.USER_ID
FROM
history AS hist
WHERE
hist.TARGET_TABLE = 4
AND hist.SITE_ID = 1
GROUP BY TARGET_PRIMARY_KEY
然而,
"USER_ID"
信息似乎与"UPDATED_AT"
不同步。我得到:
1 1025test 4 2018/10/25 12:04 e4
有人能给我一些建议吗?谢谢。
最佳答案
我将为此使用相关子查询:
select h.*
from history h
where h.updated_at = (select max(h2.updated_at)
from history h2
where h2.site_id = h.site_id and
h2.target_primary_key = h.target_primary_key
);