sql—在mysql中查找最新日期的记录以及特定条件下的其他相应值

rekjcdws  于 2021-06-19  发布在  Mysql
关注(0)|答案(1)|浏览(382)

我有一个名为“历史”的表格,下面有一些示例数据:

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

有人能给我一些建议吗?谢谢。

gab6jxml

gab6jxml1#

我将使用相关子查询:

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
                     );

相关问题