![](/img/trans.png)
[英]Return all rows with MAX value based on the calculation done on two columns
[英]Getting rows based on the max pair of two columns
我有一個表,其中有如下字段:
ID, COL1, COL2, BOOK, PAGE
而且,每個唯一的ID
我只需要一個結果。 我要以此為基礎的是最大BOOK
和PAGE
,按該順序偏愛。 因此,我將選擇具有最大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.