2

我正在尝试编写一个查询,如果可能的话希望得到一些帮助。提前致谢。

我有一个从公共来源获得的设施数据表(约 10 万行)。该数据包含几条我认为是同一个地方的记录(相同的名称、城市、州),它们只是有不同的套房号。另一个有趣的代码是我有一个数据选择计数器,只要有人选择其中一个设施,我就会增加它。这样,我可以使用选择计数和其他一些权重计算来使结果在列表中显示得更高。

我要做的是编写一个查询,当有人输入搜索查询时,它将只显示设施的一条记录,即选择计数最高的一条,并省略其余记录。

注意:我不想对数据进行任何预处理,因为它将每月重新加载。

方案: ID 名称 地址 1 地址 2 城市 国家 邮编 电话 选择计数

示例搜索:“女性”

ID  Name                        City        State   Selection Count
1   Brigham & Women's Hospital  Boston      MA      22
2   Brigham & Women's Hospital  Cambridge   MA      0
3   Brigham & Women's Hospital  Boston      MA      5
4   Brigham & Women's Hospital  Boston      MA      1
5   Brigham & Women's Hospital  Orlando     FL      3
6   Woman's Hospital of Detroit Detroit     MI      100
7   Brigham & Women's Hospital  Boston      MA      0
8   Woman's Hospital of Detroit Detroit     MI      55

我想要的是一个包含 1、2、5、6 的结果集

1,3,4,7 相同,因此带回顶部选择计数。6 和 8 相同。

我确信这里的某个地方有一个having 和一个top 子句,但我无法让它做我想做的事。

想法?

4

2 回答 2

1

怎么样

select id, name, city, state, selcount from t 
where exists
(
  select 1 from
  (select name, city, state, max(selcount) selcount
     from t 
    group by name, city, state) s
  where s.name = t.name and s.city = t.city and s.state = t.state and s.selcount = t.selcount
)

我为此构建了一个SQL Fiddle来展示一个工作示例。

于 2012-06-18T13:37:55.823 回答
0
WITH cteRowNum AS (
    SELECT ID, Name, City, State, [Selection Count],
           ROW_NUMBER() OVER(PARTITION BY Name, City, State ORDER BY [Selection Count] DESC) AS RowNum
        FROM YourTable
)
SELECT ID, Name, City, State, [Selection Count]
    FROM cteRowNum
    WHERE RowNum = 1;
于 2012-06-18T13:30:52.737 回答