下記のコードとデータを確認してください。
SELECT a.患者コード,MAX(b.基準日) as 基準日,a.測定日,COUNT(*) FROM A a LEFT JOIN B b ON a.患者コード = b.患者コード AND a.測定日 >= b.基準日 GROUP BY a.患者コード,a.測定日
患者コード | 基準日 | 測定日 | COUNT(*) |
---|---|---|---|
1111 | 20141220 | 20150821 | 7 |
1111 | 20141220 | 20150902 | 2 |
1111 | 20141220 | 20150911 | 3 |
1111 | 20141220 | 20150916 | 4 |
1111 | 20141220 | 20150918 | 3 |
1111 | 20141220 | 20150925 | 3 |
1111 | 20141220 | 20150929 | 2 |
1111 | 20141220 | 20151003 | 3 |
4989 | 20181112 | 20181227 | 2 |
15296 | 20180109 | 20180221 | 3 |
15296 | 20180109 | 20180307 | 3 |
34711 | 20200805 | 20201226 | 3 |
34711 | 20200805 | 20210116 | 2 |
35212 | 20151120 | 20160105 | 2 |
35212 | 20151120 | 20160120 | 4 |
35212 | 20151120 | 20160212 | 2 |
35212 | 20151120 | 20160309 | 3 |
35212 | 20151120 | 20160408 | 2 |
テーブルAとテーブルBは患者コードで紐づいています。
基準日に対して測定日があり、重複した測定データがあります。(COUNT(*)は同じ測定日のデータの個数を表しています。)
グループ化することで同じ測定日のレコードを1行にまとめています。
追記:また、基準日は1人の患者に対して2つ以上ある場合もあります。
このSELECT結果より、同じ患者コードかつ同じ基準日のレコードが5行以上あるものだけ
SELECTするにはどうしたらよろしいでしょうか。
追記:最終的には下記のようなSELECT結果になることを望んでいます。
患者コード | 基準日 | 測定日 | COUNT(*) |
---|---|---|---|
1111 | 20141220 | 20150821 | 7 |
1111 | 20141220 | 20150902 | 2 |
1111 | 20141220 | 20150911 | 3 |
1111 | 20141220 | 20150916 | 4 |
1111 | 20141220 | 20150918 | 3 |
1111 | 20141220 | 20150925 | 3 |
1111 | 20141220 | 20150929 | 2 |
1111 | 20141220 | 20151003 | 3 |
35212 | 20151120 | 20160105 | 2 |
35212 | 20151120 | 20160120 | 4 |
35212 | 20151120 | 20160212 | 2 |
35212 | 20151120 | 20160309 | 3 |
35212 | 20151120 | 20160408 | 2 |
欲しい結果 (同じ患者コードかつ同じ基準日のレコードが5行以上あるもの) がどのようなものか、いまいち分かりづらいので、具体的にお示しください。
> テーブルAとテーブルB
具体的なレコードのサンプルを提示しましょう。
同じ患者コードには基準日が一つしか無いようですが、Bテーブルはそういった構成になっているのでしょうか。
> 基準日に対して測定日があり
「a.測定日 >= b.基準日」とあるので測定日よりあとであることが条件なのですね?
> このSELECT結果より、同じ患者コードかつ同じ基準日のレコードが5行以上あるものだけSELECTする
「5行以上あるものだけ」とは、例えば「患者コード 1111, 35212 の行のみ」ということでしょうか?
具体的な期待される結果をレコードの形で示したほうが良いと思います。
回答2件
あなたの回答
tips
プレビュー