mysql - SQL获取按X排序的行,在Y列上有不同的值?
问题描述
似乎是一个足够简单的问题。这是一张图片:
我想要的:用黑色勾勒出的行。忽略 user_id 的“重复”值(用颜色标记)。按日期排序,DESC。
这似乎是合乎逻辑的,但顺序总是错误的,并且 user_id 的第一次出现与最近的一次出现:
SELECT * FROM
(SELECT * FROM `mytable` ORDER BY `date` DESC) as `subtable`
GROUP BY `user_id`
更改日期的 DESC/ASC 并没有改变任何东西。我认为通过在分组之前对子查询进行排序,我可以获得不同的结果,但不是。
解决方案
如果你只想要每个 user_id 的最大 file_id 有两种方法可以让它工作,你可以这样做
select user_id , max(file_id)
from mytable
group by user_id
如果您想要整行并且您知道每个 user_id 没有重复的 file_id:
select a.*
from mytable a
join (select user_id , max(file_id) as file_id
from mytable
group by user_id) b on a.user_id = b.user_id and a.file_id = b.file_id
也有使用分析功能的方法 - 但这取决于您使用的数据库
推荐阅读
- python - 如何将枚举算法应用到问题中?
- javascript - liquibase mongodb 从 liquibase 运行一个 js 脚本文件作为更改集
- flutter - 如何通过Provider.of访问数据
- mysql - Spring-Boot Mysql:如何查询数据库是否为空?
- html - CSS动画自行旋转元素360度,围绕自身旋转元素
- spring-boot - 没有活动配置文件集,回退到默认配置文件:默认
- javascript - 未捕获(承诺中)错误:输入 0 与层 lstm_LSTM1 不兼容:预期 ndim=3,发现 ndim=2
- .htaccess - .htaccess 使用 RewriteBase 时出现内部服务器错误
- python - 如何向 pip 包“console_scripts”入口点添加自动完成功能?
- java - java中next()和nextLine()的区别