プロが教える店舗&オフィスのセキュリティ対策術

ご教授願います。
SQLSERVERにて、以下の【対象テーブル】から【抽出条件】でデータを抽出したいです。
いろいろ調べてますが、うまくいかず困っています。ご協力をお願いします。

【抽出条件】
同一キー単位で1レコードずつ以下の条件で抽出する。
①同一キー単位でコードに「AA」または「BB」が存在する場合はそのレコードを抽出対象とする。(No.1 No.4を抽出)
②「AA」または「BB」が存在しない場合は日付が最新のレコードを抽出対象とする。(No.8を抽出)
③キーが重複していない場合はそのまま抽出対象とする。(No.9の抽出)

【対象テーブル】
No キー コード 日付
1 001 AA 20190501
2 001 30 20190502
3 002 40 20190601
4 002 BB 20190602
5 002 50 20190603
6 003 60 20190401
7 003  70 20190402
8 003 80 20190403
9 004 10 20190101

【抽出後】
No キー コード 日付
1 001 AA 20190501
4 002 BB 20190602
8 003 80 20190403
9 004 10 20190101

A 回答 (1件)

③は別の条件に見えるますが、実際は、①か②の条件で抽出されます。



つまり
「・AAまたはBBを含むキー かつ コードがAAまたはBB
または
・AAまたはBBを含まないキー かつ 日付がキーの中で最大」
が検出条件になります。

いろんなやり方があると思いますが、一例です)

T1: AAまたはBBを含むキーの一覧テーブル/副クエリ/ビュー等

元テーブルとT1を キーで LEFT JOIN すると、T1.キー がNULLかどうかで、 「AAまたはBBを含むキー」か「AAまたはBBを含まないキー」の判定ができる。


T2: キー, max(日付) as 最大日付 のテーブル/副クエリ/ビュー等

元テーブルとT2を キーで LEFT JOIN すると、元テーブル.日付 =T2.最大日付かどうかで、 「キーの中で最大の日付かどうか」の判定ができる。


両方合わせて
FRON 元テーブル LEFT JOIN T1 〜 LEFT JOIN T2 〜
で一つのテーブルにして、抽出できる
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

関連するカテゴリからQ&Aを探す