根据两列的最大对获取行

时间:2018-07-03 18:49:27

标签: sql ms-access

我有一张桌子,里面有像这样的字段:

ID, COL1, COL2, BOOK, PAGE

我只希望每个不同的ID获得一个结果。我要以此为依据的是按此顺序偏爱的最大BOOKPAGE。因此,我将选择具有最大BOOK的行,并在这些行中为每个PAGE选择具有最大ID的行。为此,我正在用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

2 个答案:

答案 0 :(得分:1)

这就像described according to my SQL Fiddle(对于MySQL)

read()

编辑:添加了适用于SQL Server和MS-Access的代码

(显然,除非在GROUP BY子句中,否则它们不允许您包含字段

结果相同-different SQL Fiddle here

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输出示例

screenshot

答案 1 :(得分:0)

您可以使用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)
                 );
相关问题