加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

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

发布时间:2020-12-12 16:46:38 所属栏目:MsSql教程 来源:网络整理
导读:让我们假设下表: Name SubName Message TimeUSA MA M1 1USA NY M2 2USA WA M3 3USA MA M4 4USA WA M5 5USA NY M6 6FIN HEL M7 7FIN TAM M8 8FIN HEL M9 9 我想要一个SQL查询,它将返回以下内容: Name SubName Message TimeFIN HEL M9 9FIN TAM M8 8USA NY M6
让我们假设下表:
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)

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读