【问题标题】:Only the distinct values after a group by in SQL Server 2014只有 SQL Server 2014 中分组依据后的不同值
【发布时间】:2015-06-15 14:44:58
【问题描述】:

以下是数据示例:

 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

任何帮助将不胜感激。谢谢!

【问题讨论】:

  • distinct 不是函数。它是一个“形容词”,主要修饰SELECTCOUNT()。摒弃将其当作函数使用的想法。

标签: sql sql-server group-by distinct sql-server-2014


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    我认为你所要做的就是改变你称之为 distinct 的地方。 试试这个:

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

    【讨论】:

      猜你喜欢
      • 2015-02-18
      • 1970-01-01
      • 2014-04-26
      • 1970-01-01
      • 2012-05-18
      • 1970-01-01
      • 2011-02-20
      • 2011-06-09
      • 2019-05-11
      相关资源
      最近更新 更多