当前位置:  开发笔记 > 数据库 > 正文

T SQL - Eloquent替换Correlated Subquery

如何解决《TSQL-Eloquent替换CorrelatedSubquery》经验,为你挑选了1个好方法。

我有一个查询,当前正在使用相关子查询来返回结果,但我认为可以使用ROW_NUMBER()更有说服力地解决问题.

问题在于值v的概况,通过项目的年数.每个项目都有许多版本,每个版本都有自己的配置文件,当引入版本时,它们会启动,数据当前如下所示:

    
ItemId    ItemVersionId    Year    Value
===========================================
1         1                01      0.1
1         1                02      0.1
1         1                03      0.2
1         1                04      0.2
1         1                05      0.2
1         1                06      0.3
1         1                07      0.3
1         1                08      0.4
1         2                04      0.3
1         2                05      0.3
1         2                06      0.3
1         2                07      0.4
1         2                08      0.5
1         3                07      0.6
1         3                08      0.7
2         1                01      0.1
2         1                01      0.1
2         1                01      0.2
etc

我想使用适用的最新版本返回项目的完整配置文件.对于第1项的上述示例:

ItemId    ItemVersionId    Year    Value
===========================================
1         1                01      0.1
1         1                02      0.1
1         1                03      0.2
1         2                04      0.3
1         2                05      0.3
1         2                06      0.3
1         3                07      0.6
1         3                08      0.7

我目前正在使用

SELECT ItemId, ItemVersionId, Year, Value
FROM table t
WHERE
    ItemId = 1
    AND ItemVersionId = (SELECT MAX(ItemVersionId) FROM table WHERE ItemId = t.ItemId AND Year = t.Year)   

虽然这返回正确的我怀疑有一种更有效的方法来做到这一点,特别是当表变大时.

我正在使用SQL Server 2005.

提前致谢



1> Bliek..:

我会用CTE做到这一点:

WITH Result AS
(
  SELECT Row_Number() OVER (PARTITION BY ItemId, Year
ORDER BY ItemversionId DESC) AS RowNumber
      ,ItemId
      ,ItemversionId
      ,Year
      ,Value
  FROM table
)
SELECT ItemId
  ,ItemversionId
  ,Year
  ,Value
FROM Result
WHERE RowNumber = 1
ORDER BY ItemId, Year

推荐阅读
手机用户2402852387
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有