首页 文章

选择每个组中的最后一条记录

提问于
浏览
0

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

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

3 回答

  • -2
    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;
    
  • 0

    对于每个SerialNo的顶部RemarkNo(以及来自同一行的其他字段):
    选择同一SerialNo没有更高RemarkNo的所有记录

    SELECT *
    FROM remark r1
    WHERE NOT EXISTS
      (SELECT SerialNo FROM remark r2
       WHERE (r2.RemarkNo>r1.RemarkNo)
         AND (r2.SerialNo=r1.SerialNo)
      )
    

    http://sqlfiddle.com/#!2/7da1b/21

  • 1

    您可以通过返回结果并使用排序顺序来完成此操作 . 例如...

    SELECT * from GROUP Order By GROUP.ID DESC
    

    这将以最后一条记录的顺序返回结果 . 然后,如果您不循环浏览结果,您将只返回一条记录...记录的最后一条记录 .

相关问题