mysql - MySQL group by 最大值
问题描述
嗨,我有这张桌子。
id lat lng userId
1 12 23 1
2 45 34 2
3 42 34 3
4 33 34 1
5 36 79 2
6 53 98 2
7 23 90 3
8 23 67 1
这里我们有三个用户。(用户 ID 1、2、3)。我想获取每个用户的最新记录(id 列最大值)。我的例外输出是这个
userId lat lng
1 23 67
2 53 98
3 23 90
这个查询会给我分组选项
SELECT
*
FROM
covid.locations
GROUP BY userId;
但是我如何将它与MAX(id)
功能结合起来。
解决方案
一种方法是使用以下方法:
SELECT
cl.*
FROM covid.locations cl
INNER JOIN (
SELECT
userid
, MAX( id ) mid
FROM covid.locations
GROUP BY
userId
) g ON cl.userid = g.userid
AND cl.id = cl.mid
另一种是使用row_number() over()
SELECT
userId
, lat
, lng
FROM (
SELECT
*
, ROW_NUMBER() OVER (PARTITION BY userid ORDER BY id DESC) rn
FROM covid.locations
GROUP BY
userId
) d
WHERE rn = 1
两者都将根据该表的列识别源表中的“最新”行id
。请注意,第二个查询需要 MySQL 版本 8+,因为这是row_number()
在该数据库中得到支持的时候。第一个查询应该在支持 SQL 的 dbms 中运行。
推荐阅读
- java - Java lambda 表达式和内存分配
- google-apps-script - Google Apps 脚本缓存今天停止工作
- nasm - 初始化 C++ 输入/输出流以进行汇编编程
- c# - 尝试获取随机文件但获取 System.IO.DirectoryNotFoundException
- javascript - 为什么toggleCategories函数不起作用,只显示序列号0.ReactJS
- python - 是否可以防止 tensorflow keras 进度条淹没 IDLE shell?
- python-3.x - 如何从 html 代码中打印“打印我 1”和“打印我 2”?
- python - 插入记录不显示在 postgres 中
- python - 在散景的饼图中添加标签
- elixir - 如何按值对地图进行排序?