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

也就是说,应该返回每个组中的倒数第二个记录吗?

假设序列号的所有RemarkNo是连续的。备注编号越大,则备注进行得越晚。因此,序列号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 - 在每个组中选择SECOND LAST记录,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/15453231/

10-08 21:57