SQL 查询以获取该用户的最新记录

Posted

技术标签:

【中文标题】SQL 查询以获取该用户的最新记录【英文标题】:SQL Query to get latest records for that user 【发布时间】:2020-07-21 20:01:24 【问题描述】:

我有一个 mysql 数据库,我需要一些帮助来查询表中的数据。

// Table
id              INTEGER,
column1         VARCHAR,
completiondate  DATETIME

// Sample data
(101, 'a', '2020-03-20 12:00:00')
(101, 'b', '2020-03-21 12:00:00')
(101, 'c', '2020-03-22 12:00:00')
(101, 'c', '2020-03-23 12:00:00')
(101, 'd', '2020-03-24 12:00:00')
(102, 'a', '2020-03-20 12:00:00')
(102, 'b', '2020-03-21 12:00:00')

在这里,我想查看该特定用户的所有记录,并仅显示 column1 中找到的重复项中的最新记录。

用户101的预期输出:

(101, 'a', '2020-03-20 12:00:00')
(101, 'b', '2020-03-21 12:00:00')
(101, 'c', '2020-03-23 12:00:00')
(101, 'd', '2020-03-24 12:00:00')

我是 SQL 新手。如果有人能对此提供任何见解,那就太好了。

提前致谢!

【问题讨论】:

【参考方案1】:

您可以使用子查询进行过滤:

select t.*
from mytable t
where 
    t.id = 101
    t.completiondate = (
        select max(t1.completiondate) 
        from mytable t1 
        where t1.id = t.id and t1.id = t.id and t1.column1 = t.column1
    )

或者,在 MySQL 8.0 中,您可以使用窗口函数rank()

select *
from (
     select t.*, rank() over(partition by id, column1 order by completiondate desc) rn
     from mytable t
     where id = 101
) t
where rn = 1

请注意,对于这个数据集,您还可以使用简单的聚合:

select id, column1, max(completiondate) completiondate
from mytable
where id = 101
group by id, column1

【讨论】:

【参考方案2】:

这是一种使用连接的 php 友好方式:

SELECT t1.*
FROM yourTable t1
INNER JOIN
(
    SELECT id, column1, MAX(completiondate) AS maxcompletiondate
    FROM yourTable
    GROUP BY id, column1
) t2
    ON t1.id = t2.id AND
       t1.column1 = t2.column1 AND
       t1.completiondate = t2.maxcompletiondate;

【讨论】:

【参考方案3】:

我认为最简单的方法是将表最大值加入到当前表中

SELECT user, `date`
FROM yourtable
INNER JOIN 
(
  SELECT MAX(date) AS `date`, user
  FROM yourtable
  GROUP BY user
) latest ON latest.`date`= yourtable.`date` AND latest.user = yourtable.user

【讨论】:

以上是关于SQL 查询以获取该用户的最新记录的主要内容,如果未能解决你的问题,请参考以下文章

Sql 查询以获取最多 10 条的最新记录并按提到行排名的字段排序 [关闭]

SQL Server 查询以根据用户提供的 id 获取嵌套的子记录

优化查询以获取日志表中每个人的最新记录

查询仅列出用户的最新记录

使用sql查询获取最新发布记录

sql查询获取每个id的最新记录