在sql中找到每组中的第二高?

时间:2016-02-12 15:20:46

标签: mysql database

我有这样的表结构

'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

我想找到每个遭遇的第二个最新条目?

任何人请帮忙

1 个答案:

答案 0 :(得分:1)

您可以使用变量来选择每组前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