在数据库中选择5个最新的唯一条目

b4lqfgs4  于 2021-06-21  发布在  Mysql
关注(0)|答案(2)|浏览(250)

在MySQL5.7.22表中,sql查询很难选择5个最新的、唯一的条目。例如,下面是“活动”表:

uaid    nid     created 
9222    29722   2018-05-17 03:19:33
9221    31412   2018-05-17 03:19:19
9220    31160   2018-05-16 23:47:34
9219    31160   2018-05-16 23:47:30
9218    31020   2018-05-16 22:35:59
9217    31020   2018-05-16 22:35:54
9216    28942   2018-05-16 22:35:20
...

所需的查询应按以下顺序按“nid”属性返回5个最新的、唯一的条目(但只需要nid属性):

uaid    nid     created 
9222    29722   2018-05-17 03:19:33
9221    31412   2018-05-17 03:19:19
9220    31160   2018-05-16 23:47:34
9218    31020   2018-05-16 22:35:59
9216    28942   2018-05-16 22:35:20

我尝试了各种不同的组合,但都不起作用,即:

select distinct nid from activity order by created desc limit 5

按nid返回5个最新uniq条目的正确查询是什么?

l7wslrjt

l7wslrjt1#

可以使用子查询和联接

select * from activity m
inner join (
  select nid, min(created) min_date
  from activity 
  group by nid 
  limit 5
) t on t.nid = m.nin and t.min_date = m.created
2vuwiymt

2vuwiymt2#

你的问题是最简单的一组问题。一般来说,在mysql中处理这个问题是一个非常头疼的问题,因为mysql不支持分析函数(至少在现在人们在生产中使用的大多数版本中是不支持的)。但是,因为您只需要每个组的第一条记录,所以我们可以执行一个join to subquery来查找最大值 created 每个的值 nid 组。

SELECT a1.*
FROM activity a1
INNER JOIN
(
    SELECT nid, MAX(created) AS max_created
    FROM activity
    GROUP BY nid
) a2
    ON a1.nid = a2.nid AND a1.created = a2.max_created;

演示

相关问题