一尘不染

选择3条最新记录,其中一列的值是不同的

mysql

我有下表:

    id       time      text      otheridentifier
    -------------------------------------------
    1        6         apple     4
    2        7         orange    4
    3        8         banana    3
    4        9         pear      3
    5        10        grape     2

我想做的是选择3条最近的记录(按时间desc),它们的otheridentifiers是不同的。因此,在这种情况下,结果将是id:5、4和2。

id= 3将被跳过,因为有相同otheridentifier字段的最近记录。

这是我尝试做的事情:

SELECT * FROM `table` GROUP BY (`otheridentifier`) ORDER BY `time` DESC LIMIT 3

然而,我最终得到的行id= 5, 3 ,和 1 而不是5,4,2按预期方式。

有人可以告诉我为什么这个查询不会返回我期望的结果吗?我尝试将ORDER BY更改为ASC,但这只是将返回的行重新排列为1、3、5。


阅读 273

收藏
2020-05-17

共1个答案

一尘不染

它不会返回您期望的结果,因为分组是在排序之前发生的,这从子句在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
2020-05-17