首页 > 解决方案 > 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 并没有改变任何东西。我认为通过在分组之前对子查询进行排序,我可以获得不同的结果,但不是。

标签: mysqlsql

解决方案


如果你只想要每个 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

也有使用分析功能的方法 - 但这取决于您使用的数据库


推荐阅读