gpt4 book ai didi

sql - T SQL - 相关子查询的 Eloquent 替换

转载 作者:行者123 更新时间:2023-12-04 15:16:55 24 4
gpt4 key购买 nike

我有一个查询,目前正在使用相关子查询来返回结果,但我认为这个问题可以更有效地解决,也许使用 ROW_NUMBER()。

问题是围绕一个值 v 的配置文件,通过多年的项目。每个项目都有多个版本,每个版本都有自己的配置文件,在版本推出时启动,当前数据如下所示:

    ItemId    ItemVersionId    Year    Value===========================================1         1                01      0.11         1                02      0.11         1                03      0.21         1                04      0.21         1                05      0.21         1                06      0.31         1                07      0.31         1                08      0.41         2                04      0.31         2                05      0.31         2                06      0.31         2                07      0.41         2                08      0.51         3                07      0.61         3                08      0.72         1                01      0.12         1                01      0.12         1                01      0.2etc

I want to return the full profile for an Item using the most recent version where applicable. For the above example for item 1:

ItemId    ItemVersionId    Year    Value===========================================1         1                01      0.11         1                02      0.11         1                03      0.21         2                04      0.31         2                05      0.31         2                06      0.31         3                07      0.61         3                08      0.7

I am currently using

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。

提前致谢

最佳答案

我会用 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

关于sql - T SQL - 相关子查询的 Eloquent 替换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/277726/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com