mysql - 选择每个组中的倒数第二条记录

标签 mysql greatest-n-per-group mysql-workbench dml sqlyog

有一个表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 s.SerialNo, r.RemarkNo, r.Desp
from (select SerialNo, max(RemarkNo) maxRemark from Remark group by SerialNo) s
left join Remark r on s.SerialNo = r.SerialNo and s.maxRemark-1 = r.RemarkNo

( SQLFiddle here. )

关于mysql - 选择每个组中的倒数第二条记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15453231/

相关文章:

执行脚本时 MySQL Workbench 不显示结果网格

MySQL数据导出: 'ascii' codec can't decode byte 0xc3 in position 60: ordinal not in range(128)

mysql - 创建触发器以删除超过 90 天的行

MySQL左连接3表错误

php - SQL 语法错误 (phpMyAdmin)

mysql - MySQL 中的 ROW_NUMBER()

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

PHP 插入 if 条件

MySQL "Row 30153 was cut by GROUP_CONCAT()"错误

sql - 根据连接优先级列的最低值选择不同的标识行