聚合和查找数据集的模式

时间:2013-06-13 13:03:43

标签: sql-server-2008

我正在汇总数据而我无法对某些列进行求和,因此我希望从该列或模式值中进行最频繁的观察。每个ID只能有一个站点和号码,所以如果有联系,则选择两个号码中较小的一个。

示例如下:

ID site  number

1  3     45

1  3     45

1  2     56

1  3     56

2  4     5

2  5     5

2  5     3

2  5     5

我希望它看起来像:

ID site  number

1  3     45

2  5     5

1 个答案:

答案 0 :(得分:0)

这是一种方法:

with aggregation as
(
  select id
    , site
    , number
    , numberCount = count(1)
  from SiteNumbers
  group by id
    , site
    , number
), aggregateRanks as
(
  select *
    , idRank = row_number() over (partition by id order by numberCount desc, number, site)
  from aggregation
)
select id
  , site
  , number
from aggregateRanks
where idRank = 1

SQL Fiddle with demo

它符合您的结果,但根据您的所有不同情况,可能需要进行一些调整;希望它能给你一些想法。