sql - SQL Server 2014 中仅分组后的不同值

标签 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

我想按 [ID] 进行分组,并仅采用每个组内 [Value] 的不同值,并根据 [NumPeriod] 获取“第一个”不同的 [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

所以我认为这样的事情会起作用,但没有运气:

select 
    ID, distinct(Value), NumPeriod
from 
    MyTable
group by 
    ID, Value, NumPeriod
order by 
    ID, NumPeriod

如有任何帮助,我们将不胜感激。谢谢!

最佳答案

您可以使用排名函数和 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

关于sql - SQL Server 2014 中仅分组后的不同值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30848143/

相关文章:

SQL Server 2008 数据类型 : which ones should i use?

SQL Oracle SQL 条件连接

sql - SQL Server 如何处理非聚集索引中的包含列?

mysql - 棘手的 MySQL ORDER BY 问题

python - Pandas - 排序并进入 groupby

sql - 在 SQL 中比较 "Firstname Lastname"与 "F. Lastname"

mysql - 案例陈述与比较

sql-server - SQL Server Compact 能否同时用作 SSIS 中的源和目标?

c# - 从数据库中获取数据并显示在DataGridView中

mysql 计数多个组