sql - 根据两列的最大对获取行
问题描述
我有一个表,其中包含以下字段:
ID, COL1, COL2, BOOK, PAGE
而且我只希望每个 distinct 有一个结果ID
。我想以此为基础的是最大BOOK
和PAGE
,按该顺序受青睐。所以我会选择具有最大的行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
解决方案
这按照我的 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 输出示例
推荐阅读
- python - 返回 None 类型值的函数
- python - 将多表excel工作簿拆分为多个工作簿
- c - 中断未触发。关于为什么会这样的任何想法?
- vb.net - 如何创建一个不断更新的文本框,在添加项目后立即显示更新的小计?
- r - strsplit:从整数中拆分字符串
- xslt - 如何使用 xslt 转换为制表符分隔的文本文件
- r - 如何将多个嵌套的 XML 元素转换为数据框?
- flutter - 颤振二级动画未运行
- go - 使用缓冲区作为输出时,压缩文件夹已损坏
- python - 为什么 0.24.2 版中没有关于 pandas.MultiIndex.map 的文档?它与 pandas.Index.map 有关吗?