只有SQL Server 2014中的分组后的不同值

use*_*988 2 sql sql-server group-by distinct sql-server-2014

以下是数据示例:

 ID     Value   NumPeriod 
 ------------------------     
 1681642    596.8   2 
 1681642    596.8   3 
 1681663    445.4   2
 1681663    445.4   3 
 1681688    461.9   3 
 1681707    282.2   3 
 1681724    407.1   3
 1681743    467     2 
 1681743    467     3 
 1681767    502     3
Run Code Online (Sandbox Code Playgroud)

我想按[ID]进行分组,只取每组中[Value]的不同值,并根据[NumPeriod]取"first"不同的[Value].所以结果看起来像这样:

 ID     Value   NumPeriod 
 -------------------------     
 1681642    596.8   2 
 1681663    445.4   2
 1681688    461.9   3 
 1681707    282.2   3 
 1681724    407.1   3
 1681743    467     2 
 1681767    502     3
Run Code Online (Sandbox Code Playgroud)

所以我虽然这样的东西会起作用,但没有运气:

select 
    ID, distinct(Value), NumPeriod
from 
    MyTable
group by 
    ID, Value, NumPeriod
order by 
    ID, NumPeriod
Run Code Online (Sandbox Code Playgroud)

任何帮助,将不胜感激.谢谢!

Tim*_*ter 5

您可以使用排名功能和CTE:

WITH CTE AS
(
    SELECT ID, Value, NumPeriod,
           RN = ROW_NUMBER() OVER (PARTITION BY ID ORDER BY NumPeriod ASC)
    FROM MyTable
)
SELECT ID, Value, NumPeriod
FROM CTE
WHERE RN = 1
ORDER BY ID, Value
Run Code Online (Sandbox Code Playgroud)