3 回答
TA贡献1719条经验 获得超6个赞
它不会返回您期望的结果,因为分组是在排序之前发生的,这从子句在SQL语句中的位置反映出来。不幸的是,您将不得不变得更加幻想才能获得想要的行。尝试这个:
SELECT *
FROM `table`
WHERE `id` = (
SELECT `id`
FROM `table` as `alt`
WHERE `alt`.`otheridentifier` = `table`.`otheridentifier`
ORDER BY `time` DESC
LIMIT 1
)
ORDER BY `time` DESC
LIMIT 3
TA贡献1757条经验 获得超8个赞
您可以将表本身联接起来以过滤per的最后一个条目otheridentifier,然后采用该表的前3行:
SELECT last.*
FROM `table` last
LEFT JOIN `table` prev
ON prev.`otheridentifier` = last.`otheridentifier`
AND prev.`time` < last.`time`
WHERE prev.`id` is null
ORDER BY last.`time` DESC
LIMIT 3
TA贡献1859条经验 获得超6个赞
我有类似的要求,但选择标准更高。使用其他一些答案,我无法确切获得所需的信息,但是我发现您仍然可以像下面这样执行GROUP BY和ORDER BY:
SELECT t.* FROM (SELECT * FROM table ORDER BY time DESC) t
GROUP BY t.otheridentifier
添加回答
举报