簡體   English   中英

選擇每個組中的最后一條記錄

[英]Select the last record in each group

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

也就是說,應該返回每個組中的最后一條記錄???

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;

對於每個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

您可以通過返回結果並使用排序順序來做到這一點。 例如...

SELECT * from GROUP Order By GROUP.ID DESC

這將首先按照最后一條記錄的順序返回結果。 然后,如果您不循環瀏覽結果,則將僅返回一條記錄……最后一條記錄。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM