簡體   English   中英

根據兩列的最大對獲取行

[英]Getting rows based on the max pair of two columns

我有一個表,其中有如下字段:

ID, COL1, COL2, BOOK, PAGE

而且,每個唯一的ID我只需要一個結果。 我要以此為基礎的是最大BOOKPAGE ,按該順序偏愛。 因此,我將選擇具有最大BOOK的行,並在這些行中為每個ID選擇具有最大PAGE行。 我為此在MS ACCESS中編寫SQL。

我要實現的示例:

ID  COL1   COL2  BOOK  PAGE
 1    X      Y     10    12
 1    X      Z     10    14
 2    Y      W     14     7
 3    J      K     15     9
 3    J      K     16     6

假設我有類似上圖的內容。 我最終會得到:

 ID  COL1   COL2  BOOK  PAGE
 1    X      Z     10    14
 2    Y      W     14     7
 3    J      K     16     6

按照我的SQL Fiddle (適用於MySQL)所述的方式進行

SELECT Table1.ID, Col1, Col2, Book, Max(Page) AS MaxPage FROM Table1
INNER JOIN 
   ( SELECT ID, MAX(`Book`) AS MaxBook
     FROM Table1
     GROUP BY ID) AS t1
ON Table1.ID = t1.ID
AND Table1.Book = t1.MaxBook
Group BY Table1.ID, Book

編輯:添加了代碼以用於SQL Server和MS-Access

(顯然,除非在GROUP BY子句中,否則它們不允許您包含字段

結果相同- 此處的SQL Fiddle不同

SELECT Table1.ID, Col1, Col2, Table1.Book, Table1.Page FROM Table1
INNER JOIN
    (SELECT Table1.ID, Book, Max(Page) AS MaxPage FROM Table1
      INNER JOIN 
        (SELECT ID, MAX(Book) AS MaxBook
         FROM Table1
         GROUP BY ID) AS t1
       ON Table1.ID = t1.ID AND Table1.Book = t1.MaxBook
       GROUP BY Table1.ID, Table1.Book) AS t2
ON Table1.ID = t2.ID 
AND Table1.Book = t2.Book 
AND Table1.Page = t2.MaxPage

SQL輸出示例

截圖

您可以使用not exists和相關子查詢:

select t.*
from t
where not exists (select 1
                  from t as t2
                  where t2.id = t.id and
                        t2.book > t.book or
                        (t2.book = t.book and t2.page > t.page)
                 );

暫無
暫無

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

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