我本人为此进行了很多次努力,解决方案是以不同的方式考虑您的查询。
我希望其中具有该DocGroupViewID的所有行的Del_Index是最高(最大)的每个DocGroupViewID行:
SELECt T.DocGroupViewID, T.Del_Index, T.IDFROM MyTable TWHERe T.Del_Index = ( SELECt MAX( T1.Del_Index ) FROM MyTable T1 WHERe T1.DocGroupViewID = T.DocGroupViewID )
当多个行可以具有相同的行时,它将变得更加复杂
Del_Index,因为从那时起,您需要某种方式来选择要显示的行。
编辑:想跟进另一种选择
您可以将
RANK()或
ROW_NUMBER()函数与CTE结合使用,以更好地控制结果,如下所示:
-- fake a source tableDECLARE @t TABLE ( ID int IDENTITY(1,1) PRIMARY KEY, Del_Index int, DocGroupViewID int)INSERT INTO @tSELECt 1, 1 UNIOn ALLSELECT 2, 1 UNIOn ALLSELECT 3, 1 UNIOn ALLSELECT 1, 2 UNIOn ALLSELECT 2, 2 UNIOn ALLSELECT 2, 2 UNIOn ALLSELECT 1, 3 UNIOn ALLSELECT 2, 3 UNIOn ALLSELECT 3, 3 UNIOn ALLSELECT 4, 3-- show our sourceSELECT * FROM @t-- select using RANK (can have duplicates);WITH cteRank AS( SELECT DocGroupViewID, Del_Index, ID, RANK() OVER (PARTITION BY DocGroupViewID ORDER BY Del_Index DESC) AS RowRank, ROW_NUMBER() OVER (PARTITION BY DocGroupViewID ORDER BY Del_Index DESC) AS RowNumber FROM @t)SELECt *FROM cteRankWHERe RowRank = 1-- select using ROW_NUMBER;WITH cteRowNumber AS( SELECT DocGroupViewID, Del_Index, ID, RANK() OVER (PARTITION BY DocGroupViewID ORDER BY Del_Index DESC) AS RowRank, ROW_NUMBER() OVER (PARTITION BY DocGroupViewID ORDER BY Del_Index DESC) AS RowNumber FROM @t)SELECt *FROM cteRowNumberWHERe RowNumber = 1
如果您有办法解决领带,只需将其添加到中
ORDER BY。



