从设施列表中获取子数据

时间:2012-06-18 13:26:20

标签: sql sql-server-2008

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

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

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

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

Scheama: 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相同。

我确信在这里有一个和一个顶级条款,但我无法让它做我想要的。

思想?

2 个答案:

答案 0 :(得分: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来展示一个有效的例子。

答案 1 :(得分: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;