首页 > 解决方案 > 根据两列的最大对获取行

问题描述

我有一个表,其中包含以下字段:

ID, COL1, COL2, BOOK, PAGE

而且我只希望每个 distinct 有一个结果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

标签: sqlms-access

解决方案


按照我的 SQL Fiddle (for 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 输出示例

截屏


推荐阅读