sql – 选择每个的最大值(Col1,Col2)

前端之家收集整理的这篇文章主要介绍了sql – 选择每个的最大值(Col1,Col2)前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
让我们假设下表:
Name             SubName        Message    Time
USA             MA              M1         1
USA             NY              M2         2
USA             WA              M3         3
USA             MA              M4         4
USA             WA              M5         5
USA             NY              M6         6
FIN             HEL             M7         7
FIN             TAM             M8         8
FIN             HEL             M9         9

我想要一个SQL查询,它将返回以下内容

Name             SubName        Message    Time
FIN              HEL            M9         9
FIN              TAM            M8         8
USA              NY             M6         6
USA              WA             M5         5
USA              MA             M4         4

所以一个ORDER BY时间DESC,它由不同的名称分组,并由不同的子名称进行分组.

这可能吗?我正在寻找一种不是DBMS特定的解决方案 – 可以在大多数所有DBMS中运行.

解决方法

您没有标记您的RDBMS,因此对于应用于大多数RDBMS的ANSI-sql,您可以使用ROW_NUMBER():
SELECT s.* FROM (
    SELECT t.*,ROW_NUMBER() OVER(PARTITION BY t.name,t.subname ORDER BY t.time DESC) as rnk
    FROM YourTable
    ) s
WHERE s.rnk = 1
ORDER BY s.time DESC,s.name

编辑:这是一个核心ANSI sql的答案,应该在任何数据库上工作,你可以使用NOT EXISTS():

SELECT * FROM YourTable t
WHERE NOT EXISTS(SELECT 1 FROM YourTable s
                 WHERE t.name = s.name and t.subname = s.subname
                   AND s.time > t.time)
原文链接:https://www.f2er.com/mssql/81347.html

猜你在找的MsSQL相关文章