mysql - 选择数据库中最近的 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 条目的正确查询是什么?
解决方案
您的问题是每组前 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;
演示
推荐阅读
- amazon-web-services - 使用 Terraform 在 AWS 上的现有资源上更新和附加新属性
- sql-server - 从 SQL Server Agent Job 执行时,SSIS 脚本任务出错。System.IO.FileNotFoundException:无法加载文件或程序集
- python-3.x - 为什么不同的python版本在stand output print上有不同的行为?
- c# - 如何以编程方式为 XtraPivotGrid (Devexpress) 选择数据源
- ios - iOS dark light mode not updating UIViewController
- swift - 如何使在 TextField 中输入的文本不可删除?
- ssl - 如何通过在 Amazon Linux 2 上编辑 httpd.conf 将 ssl 证书安装到 Apache2
- regex - sed 用另一个文件的内容替换多行文件中的标记
- javascript - 如何在 nextjs 类组件中以编程方式路由到或导航到路由?
- python - Pandas 将一个组的值投射给组中的每个成员