选择每个组中的SECOND LAST记录

Kim*_*cks 6 mysql mysql-workbench dml greatest-n-per-group 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
Run Code Online (Sandbox Code Playgroud)

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

             10 |         1 | rainy
             11 |         3 | cloudy
             12 |      null | null
Run Code Online (Sandbox Code Playgroud)

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

假设SerialNo的所有RemarkNo都是连续的.备注数量越大,评论越晚.因此,SerialNo 10的第二个RemarkNo是1,Desp'rainy'.

小智 5

尝试:

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
Run Code Online (Sandbox Code Playgroud)

(SQLFiddle在这里.)