2

クエリを作成しようとしていますが、可能であれば助けを求めています。前もって感謝します。

私は公共の情報源から取得している施設データ (~100k 行) のテーブルを持っています。そのデータには、同じ場所 (同じ名前、都市、州) と見なされるレコードがいくつか含まれていますが、部屋番号が異なるだけです。もう 1 つの興味深いコードは、誰かが施設の 1 つを選択するたびにインクリメントするデータの選択カウンターを持っていることです。このようにして、選択数を他の重み計算と一緒に使用して、結果をリストの上位に表示することができます。

私がやろうとしているのは、誰かが検索クエリを入力すると、施設の 1 つのレコード (選択数が最も多いレコード) のみを表示し、残りを省略するクエリを作成することです。

注: データは毎月再ロードされるため、データの前処理は行いたくありません。

スキーマ: 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 に答える