DECLARE @t Table(Name Varchar(30),[Year] Int, [Month] Int,Value Int)
Insert Into @t Values('JERRY' , 2012, 9, 100)
Insert Into @t Values('JERRY', 2012, 9 , 120)
Insert Into @t Values('JERRY' , 2012, 9 , 130)
Insert Into @t Values('JERRY', 2012 , 8 , 20)
Insert Into @t Values('JERRY', 2011, 12 , 50)
Declare @LatestYr Int
Declare @LatestMonth Int
Select @LatestYr= Max([Year])From @t
Select @LatestMonth = Max([Month]) From @t Where [Year] = @LatestYr
Select * From @t
Where ([Year] = @LatestYr And [Month] = @LatestMonth)
结果
上述查询的工作只是为单个用户。并且会失败多个用户,或在关系的情况下。例如,请考虑下面的情形
在这种情况下,所需的输出将是
所以对于处理这样的情况,我建议以下解决方案
解决方案1
Select t.*
From @t t
Join
(
Select x.Name,x.Max_Year,y.Max_Month
From
( SELECT Name,Max_Year = Max([Year])
From @t
Group By Name
)x
Join
( SELECT Name,[Year],Max_Month= Max([Month])
From @t
Group By Name,[Year]
)y On x.Name = y.Name And x.Max_Year = y.[Year]
)x
On t.Name = x.Name
And t.[Year] = x.Max_Year
And t.[Month] = x.Max_Month
OR
溶液2(SQL服务器2005+)
Select Name,[Year],[Month],Value
From
(
Select *,Rn = Rank() Over(Partition By Name Order By [Year] desc, [Month] Desc)
From @t
)X Where X.Rn =1
溶液3(SQL服务器2005+)
Select Name,[Year],[Month],Value
From
(
Select *,Rn = Dense_Rank() Over(Partition By Name Order By [Year] desc, [Month] Desc)
From @t
)X Where X.Rn =1
的DDL是
下
DECLARE @t Table(Name Varchar(30),[Year] Int, [Month] Int,Value Int)
Insert Into @t Values('JERRY' , 2012, 9, 100)
Insert Into @t Values('JERRY', 2012, 9 , 120)
Insert Into @t Values('JERRY' , 2012, 9 , 130)
Insert Into @t Values('JERRY', 2012 , 8 , 20)
Insert Into @t Values('JERRY', 2011, 12 , 50)
Insert Into @t Values('FERRY' , 2010, 9, 100)
Insert Into @t Values('FERRY', 2010, 9 , 120)
Insert Into @t Values('FERRY', 2010, 8 , 120)
Insert Into @t Values('JERRY1' , 2012, 9, 100)
Insert Into @t Values('JERRY1', 2012, 9 , 120)
Insert Into @t Values('JERRY1' , 2012, 9 , 130)
Insert Into @t Values('JERRY1', 2012 , 8 , 20)
Insert Into @t Values('JERRY1', 2011, 12 , 50)
希望这可能有所帮助。由于
对于哪个DBMS是这样的? –
以上是针对MSSQL的。 – Outflanker
我不明白你的输出要求。另外 - 样本数据应该包含另一个人的数据,而不仅仅是JERRY的? –