【发布时间】:2013-03-05 09:31:26
【问题描述】:
有一个表Remark包含如下数据:
SerialNo | RemarkNo | Desp
=============================================
10 | 1 | rainy
10 | 2 | sunny
11 | 1 | sunny
11 | 2 | rainy
11 | 3 | cloudy
11 | 4 | sunny
12 | 1 | rainy
什么查询会返回以下结果:
10 | 1 | rainy
11 | 3 | cloudy
12 | null | null
即应该返回每组倒数第二条记录?
假设 SerialNo 的所有 RemarkNo 都是连续的。备注编号越大,备注越晚。因此,SerialNo 10 的倒数第二个 RemarkNo 是 1 且 Desp 为“rainy”。
【问题讨论】:
-
SELECT r1.* FROM remark r1 LEFT JOIN remark r2 ON (r1.serial_no = r2.serial_no AND r1.remark_no
-
不应该返回
10|1|Sunny吗? -
@KevinBowersox 在我的问题中添加了我的假设。
-
看看这个问题是否有帮助:stackoverflow.com/q/1895110/1275871。如果是这样,您可以按 RemarkNo 降序对表格进行排序,然后为每个 SerialNo 保留第二行。在支持 ROW_NUMBER 窗口函数的数据库中很容易。
标签: mysql greatest-n-per-group mysql-workbench dml sqlyog