使用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条目的正确查询是什么?
答案 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;
答案 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