6つのテーブルでジョインを実行し、条件に基づいてさまざまなカラムをフェッチするクエリがあります。私はcount(distinct dateCaptured)>30
を持っているメンバーだけを私に与える特別なフィルター条件を追加したいと思います。私はGroup by
とhaving
を使ってこの条件を満たすメンバーのリストを得ることができます。しかし、私はこの1つの条件のために他の列名でグループ化したくありません。この場合はPARTITION BY
を使用する必要がありますか?グループを使用せずにSQLフィルタ行をベースにする
サンプルテーブル
+-----+------------+--------------+
| Id | Identifier | DateCaptured |
+-----+------------+--------------+
| 1 | 05548 | 2017-09-01 |
| 2 | 05548 | 2017-09-01 |
| 3 | 05548 | 2017-09-01 |
| 4 | 05548 | 2017-09-02 |
| 5 | 05548 | 2017-09-03 |
| 6 | 05548 | 2017-09-04 |
| 7 | 37348 | 2017-08-15 |
| 8 | 37348 | 2017-08-15 |
| . | | |
| . | | |
| . | | |
| 54 | 37348 | 2017-10-15 |
+-----+------------+--------------+
クエリ
SELECT a.value,
b.value, c.value,
d.value
FROM Table a
INNER JOIN Table b on a.Id=b.id
INNER JOIN Table c on a.Id=c.Id and s.Invalid=0
INNER JOIN Table d on a.Id=d.Id
は、テーブルAは、識別子37348
ための30件の以上のレコードを有していると仮定する。どのように私は上記のクエリのためのこの識別子だけ得ることができます。
私は上記のSELECTに興味がある患者です。
SELECT a.Identifier,count(DISTINCT DateCaptured)
FROM Table a
INNER JOIN Table b on a.Id=b.id
INNER JOIN Table c on a.Id=c.Id and s.Invalid=0
INNER JOIN Table d on a.Id=d.Id
GROUP BY Identifier
HAVING count(DISTINCT DateCaptured)>30
....あなたの出力を何にするかによって異なりますあなたがどのような条件で始まるかのように見えます。確かに、どのテーブルにも 'DateCaptured'があるものを集計することはできますが、カウントされた行を最初に減らす必要があるかどうかは分かりません(つまり、他のテーブルの参照も必要です)。ウィンドウカウントは、カウントに加えて、すべての単一の日付も表示する場合に、主に有効です。 –
どのSQL Serverのバージョンを使用していますか? – Sparrow
@ Clockwork-Muse最初のクエリと同じ出力です。 count(distinct dateCaptured)> 30は、30以上の異なる日付を持つ 'Identifier'のみを考慮するフィルタ条件です。 – shockwave