我有这样的桌子结构

'encounterID' , 'dateAndTime'

1234          2016-02-12 17:57:57
1234          2016-02-12 17:58:59
1234          2016-02-12 17:59:05

12345         2016-02-12 17:57:57
12345         2016-02-12 17:58:59
12345         2016-02-12 17:59:05

我想为每个遇到的人找到第二个最新的条目?
任何人请帮忙

最佳答案

您可以使用变量选择每个组的前n个记录:

SELECT encounterID, dateAndTime
FROM (
  SELECT encounterID, dateAndTime,
         @rn := IF(@eID = encounterID, @rn + 1,
                   IF(@eID := encounterID, 1, 1)) AS rn
  FROM mytable
  CROSS JOIN (SELECT @rn := 0, @eID := 0) AS vars
  ORDER BY encounterID, dateAndTime DESC) AS t
WHERE t.rn = 2

外部查询选择每个encounterID组的第二个最新记录。
Demo here

10-08 02:25