[英]Select the last record in each 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
也就是说,应该返回每个组中的最后一条记录???
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;
对于每个SerialNo的顶部RemarkNo(以及同一行中的其他字段):
选择所有记录,其中相同的序列号没有更高的备注编号
SELECT *
FROM remark r1
WHERE NOT EXISTS
(SELECT SerialNo FROM remark r2
WHERE (r2.RemarkNo>r1.RemarkNo)
AND (r2.SerialNo=r1.SerialNo)
)
您可以通过返回结果并使用排序顺序来做到这一点。 例如...
SELECT * from GROUP Order By GROUP.ID DESC
这将首先按照最后一条记录的顺序返回结果。 然后,如果您不循环浏览结果,则将仅返回一条记录……最后一条记录。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.