mysql - sql最新时间 - sql查询最新一条数据




选择3个最新记录,其中一列的值不同 (6)

Andomar的答案可能是最好的,因为它不使用子查询。

另一种方法:

select *
from   `table` t1
where  t1.`time` in (
                    select   max(s2.`time`)
                    from     `table` t2
                    group by t2.otheridentifier
                    )

我有下表:

    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),其他otheridentifier是不同的。 所以在这种情况下,结果将是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。


关于什么

SELECT *, max(time) FROM `table`  group by otheridentifier

您可以使用此查询来获得正确的答案:

SELECT * FROM 
      (SELECT * FROM `table` order by time DESC)
          t group by otheridentifier

您可以将表连接到自身以过滤每个otheridentifier的最后一个条目,然后获取前三行:

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

这也是:

SELECT * FROM
OrigTable T INNER JOIN 
( 
SELECT otheridentifier,max(time) AS duration
FROM T
GROUP BY otheridentifier) S
ON S.duration = T.time AND S.otheridentifier = T.otheridentifier.

SELECT * FROM table t1 
WHERE t1.time = 
    (SELECT MAX(time) FROM table t2 
     WHERE t2.otheridentifier = t1.otheridentifier)




sql-order-by