首页 > 解决方案 > 选择数据库中最近的 5 个唯一条目

问题描述

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

标签: mysql

解决方案


您的问题是每组前 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;

在此处输入图像描述

演示


推荐阅读