选择每个组中的最后一条记录

时间:2013-03-16 17:55:11

标签: mysql sql database select greatest-n-per-group

表格Remark包含如下所示的数据:

       SerialNo | RemarkNo  | Desp
=============================================
             10 |         1 | rainy
             10 |         2 | sunny
             11 |         1 | sunny
             11 |         2 | rainy
             11 |         3 | cloudy
             12 |         1 | rainy

如果我运行查询SELECT * FROM remark WHERE remark_no IN (SELECT MAX(remark_no) FROM remark GROUP BY serial_no);,我仍然会得到以上结果:

什么查询将返回以下结果:

             10 |         2 | sunny
             11 |         3 | cloudy
             12 |         1 | rainy

也就是说,应该返回每组中的最后一条记录?

3 个答案:

答案 0 :(得分:1)

SELECT
  r1.*
FROM remark r1
  LEFT JOIN remark r2
    ON (r1.serial_no = r2.serial_no
    AND r1.remark_no < r2.remark_no)
WHERE r2.remark_no IS NULL;

答案 1 :(得分:0)

对于每个SerialNo的顶部RemarkNo(以及来自同一行的其他字段):
选择同一SerialNo

没有更高RemarkNo的所有记录
SELECT *
FROM remark r1
WHERE NOT EXISTS
  (SELECT SerialNo FROM remark r2
   WHERE (r2.RemarkNo>r1.RemarkNo)
     AND (r2.SerialNo=r1.SerialNo)
  )

http://sqlfiddle.com/#!2/7da1b/21

答案 2 :(得分:-2)

您可以通过返回结果并使用排序顺序来执行此操作。例如......

SELECT * from GROUP Order By GROUP.ID DESC

这将以最后一条记录的顺序返回结果。然后,如果你没有遍历结果,你只会返回一条记录......最后一条记录。