さて、これが問題です。SQL DB に 2 つのテーブルがあります。表 1 は、DB 内の各個人のレコードを含む単純な連絡先テーブルです。表 2 は教育/試験テーブルで、DB には個人ごとに 1 つのレコードがありますが、各レコードには複数のテストが含まれています。2 つのテーブルにクエリを実行して、期限切れの値 (今日より古い) を持つすべてのレコードのリストを取得しようとしているので、レコードに削除フラグを付けることができます。DB に格納されている日付はすべて有効期限です。これに関するキッカーは、個人の試験記録はすべて記録の 1 つの行に存在するため、試験日の 1 つでも有効期限が切れていない場合、記録全体を保持する必要があることです。null 値と期限切れの日付の組み合わせがある場合にのみ、レコードを削除できます。全員が 4 つのレコードを持っているわけではありません。ほとんどの場合、1 つまたは 2 つのレコードがあり、残りのレコードは Null です。
select n.id, n.FULL_NAME, e.ExamDate1, e.ExamDate2, e.ExamDate3, e.ExamDate4
from Name n inner join Education e on n.id = e.id
これで 57,000 レコードが得られ、それらはすべてミックスです。結果のスニペットは次のようになります。
| | ID | フルネーム | 試験日1 | 試験日 | 試験日3 | 試験日4 |
| | 10001 | ジョン・ドウ | 2008 年 1 月 1 日 | ヌル | ヌル | 2015 年 10 月 25 日 |
| | 10002 | ジェーン ドウ | 2020 年 10 月 8 日 | 2015 年 1 月 25 日 | 2014 年 4 月 16 日 | ヌル |
| | 10003 | ジョン・スミス | 2010 年 1 月 1 日 | 2008 年 6 月 5 日 | 2013 年 9 月 15 日 | 2001 年 7 月 8 日 |
| | 10004 | デビー・スー | 2020 年 8 月 14 日 | 2016 年 6 月 5 日 | ヌル | ヌル |
| | 10005 | スージー Q | 2016 年 5 月 9 日 | 2014 年 4 月 15 日 | 2017 年 4 月 9 日 | ヌル |
このデータを取得して整理し、各人に良いか悪いかを示すフラグを立てる必要があります。リストされた日付の少なくとも 1 つが期限切れになっていない場合は適切であり、リストされているすべての日付が期限切れであるか、すべての日付が期限切れで日付のないレコードが null である場合は不適切です。
これを行う最も簡単な方法についてのアイデアはありますか? 各試験日のケースを使用して各レコードを実行する手順でケースステートメントを考えていました。空白として始まる保存変数を用意し、変数 = 変数 + 'X' としてその保存変数に値を追加し、サイクルの最後に変数の値を調べます。値が yyyy の場合、レコードにフラグが立てられます (表示されます)。そうでない場合、レコードはそのままになります。サイクルが完了したら、変数を空白にリセットして最初からやり直します。
これが私の頭の中と同じように理にかなっていることを願っていますが、常に紙の上にあるとは限りません.
ありがとう。