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

时间:2018-05-17 13:15:11

标签: mysql

使用SQL查询来选择MySQL 5.7.22表中最近的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

我尝试了各种DISTINCT组合,但都没有效果,即:

select distinct nid from activity order by created desc limit 5 

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

2 个答案:

答案 0 :(得分:2)

您的问题是每组前N个问题最简单的形式。一般来说,这个问题在MySQL中是一个非常令人头痛的问题,它不支持分析功能(至少目前人们在生产中使用的大多数版本都没有)。但是,由于您只需要每个组的第一条记录,我们可以加入子查询,查找每个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;

enter image description here

Demo

答案 1 :(得分:1)

您可以使用子查询并加入

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