我希望有一个简单的方式来做,而不使用子查询:
场景:您有“表”,列“键”,“子键”和“值”。我需要为给定的“键”获取MAX的值(“SubKey”)。
所以如果表包含行:
KEY SUBKEY VALUE 1 1 100 1 2 200 1 3 300
对于Key = 1,我需要值300.我希望做这样的事情:
SELECT VALUE FROM TableA WHERE Key = 1 HAVING SubKey = MAX(SubKey)
但这是一个不要走的路。有没有办法做这个而不做’WHERE SubKey =(subselect for max subkey)’?
解决方法
使用自联接:
这将返回所有与子键值匹配的值,以防万一有多个。
SELECT a.value FROM TABLE a JOIN (SELECT MAX(t.subkey) AS max_subkey FROM TABLE t WHERE t.key = 1) b ON b.max_subkey = a.subkey WHERE a.key = 1
使用RANK& CTE(sql Server 2005):
这将返回所有与子键值匹配的值,以防万一有多个。
WITH summary AS ( SELECT t.*,RANK() OVER(ORDER BY t.subkey DESC) AS rank FROM TABLE t WHERE t.key = 1) SELECT s.value FROM summary s WHERE s.rank = 1
使用ROW_NUMBER& CTE(sql Server 2005):
这将返回一行,即使有多个具有相同子项的值…
WITH summary AS ( SELECT t.*,ROW_NUMBER() OVER(ORDER BY t.subkey DESC) AS rank FROM TABLE t WHERE t.key = 1) SELECT s.value FROM summary s WHERE s.rank = 1
使用TOP:
这将返回一行,即使有多个具有相同子项的值…
SELECT TOP 1 t.value FROM TABLE t WHERE t.key = 1 ORDER BY t.subkey DESC
原文地址:https://www.jb51.cc/mssql/84571.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。