SQL 按问题分组

标签 sql

SELECT SomeId, ModifiedUser, MAX(ModifiedDate) 
FROM SomeTable 
GROUP BY SomeId, ModifiedUser

然后我得到这样的结果:

1000    User1    Mar 30 2011
1000    User2    Jun 25 2011
1001    User3    Mar 21 2011
1001    User4    Jun 20 2011

如何修改查询以便只得到

1000    User2    Jun 25 2011
1001    User4    Jun 20 2011

基本上取第一个查询结果,然后按 SomeId 与最新的 ModifiedDate 和 ModifiedUser 连接到最新的 ModifiedDate 进行分组

最佳答案

您必须执行 2 个查询并加入它们。

第一个查询:

SELECT SomeId, Max(ModifiedDate) 
FROM SomeTable GROUP BY SomeId

这会挑出“唯一信息”。然后,您加入:

SELECT SomeId, ModifiedUser, ModifiedDate 
from SomeTable 

给你所有的数据。所以,完整的查询是:

SELECT SomeId, ModifiedUser, ModifiedDate 
FROM SomeTable 
INNER JOIN (
            SELECT SomeId, Max(ModifiedDate) maxmod 
            FROM SomeTable 
            GROUP BY SomeId) uniqueinfo ON SomeTable.SomeId = uniqueinfo.SomeId 
                                       AND ModifiedDate = uniqueinfo.maxmod

关于SQL 按问题分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6444562/

相关文章:

sql - 无法将查询从 Oracle SQL 传输到具有多个联接的 MS SQL

java - 这个提取可以完成更多 "elegantly"吗?

sql - 如果我明确想要 INNER JOIN,省略 INNER 关键字是否安全?

php - 将表单中的数据存储到数据库中

mysql - 在 mysqlWB 中同步我的模型时出错

java - 如何将字符串数组显示到 JPanel?

python - 使用 PyQt 从 MySQL 查询渲染 PDF 速度缓慢

sql - 使用映射表动态更改列名

SQL Server - 'NOT NULL' 主键上的约束冗余?

mysql - 使用 OR 子句查询花费的时间太长,但它们的部分非常快