我有一个名为“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
                     );

10-06 11:10