我希望有一种简单的方法可以在不使用子查询的情况下执行此操作:
场景:您有“TableA”,其中包含“Key”、“SubKey”和“Value”列。我需要获取给定“Key”的 MAX(“SubKey”) 的“Value”。
因此,如果表包含以下行:
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
使用顶部:
这将返回一行,即使有多个行具有相同的子键值......
SELECT TOP 1
t.value
FROM TABLE t
WHERE t.key = 1
ORDER BY t.subkey DESC
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)