微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

T-SQL:基于MAX(其他列)选择列

我希望有一个简单的方式来做,而不使用子查询

场景:您有“表”,列“键”,“子键”和“值”。我需要为给定的“键”获取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 举报,一经查实,本站将立刻删除。

相关推荐