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

Posted

技术标签:

【中文标题】选择每组中的最后一条记录【英文标题】:Select the last record in each group 【发布时间】:2013-03-05 08:40:11 【问题描述】:

有一个表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

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

【问题讨论】:

Retrieving the last record in each group 的可能重复项 【参考方案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;

【讨论】:

【参考方案2】:

对于每个 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

【讨论】:

【参考方案3】:

您可以通过返回结果并使用排序顺序来做到这一点。比如……

SELECT * from GROUP Order By GROUP.ID DESC

这将按照最后一条记录的顺序首先返回结果。然后,如果您不循环遍历结果,您将只返回一条记录……最后一条记录。

【讨论】:

有没有想过什么最能降低数据库结果的性能?它是连接表。

以上是关于选择每组中的最后一条记录的主要内容,如果未能解决你的问题,请参考以下文章

检索每个组中的最后一条记录 - MongoDB

检索每个组中的最后一条记录 - MySQL

检索每个组中的最后一条记录 - MySQL

检索每个组中的最后一条记录 - MySQL

检索每个组中的最后一条记录 - MySQL

检索每个组中的最后一条记录 - MySQL