I have a query that currently uses a correlated subquery to return results, but I think the problem can be solved more eloquently, possibly using ROW_NUMBER ().
The problem is related to the profile of the value of v after several years for the element. Each element has several versions, each of which has its own profile, which begins when a version is entered, and the data currently looks like this:
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
I want to return the full profile for an item using the latest version, where applicable. For the above example for item 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
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)
While this returns the correct one, I suspect there is a more efficient way to do this, especially when the table becomes large.
I am using SQL Server 2005.
Thanks in advance
sql sql-server-2005
jheppinstall
source share