日付の値を "より大きい"または "より小さい"条件と比較して3つのテーブルをクエリします。しかし、私はこれについてSQLを書いていません。日付比較の表には、開始日と終了日の2つの日付の範囲ではなく、フィールドのみがあります。テーブルは以下のとおりです。SQL - 他のテーブルの値に基づく範囲の比較に基づくテーブルの結合/参照テーブル
staff_roster - 月のスタッフの日々のレコードを含む大きなテーブル:
staff_no | store | r_date
----------------------------
sf001 | A | 1/10/2016
sf001 | A | 2/10/2016
sf001 | A | 3/10/2016
sf001 | A | 4/10/2016
sf001 | A | 5/10/2016
sf001 | A | 6/10/2016
sf001 | A | 7/10/2016
sf001 | A | 8/10/2016
....
sf002 | A | 1/10/2016
sf002 | A | 2/10/2016
....
staff_posmove - 条件を探したテーブル:
staff_no | p_date | previous_pos | new_pos
---------------------------------------------------
sf001 | 3/10/2016 | Jr sales | clerk
sf001 | 6/10/2016 | clerk | Sr sales
staff_profile
staff_no | position
---------------------
sf001 | Sr sales
sf002 | Jr sales
テーブル「staff_roster」の列には、次のような結果が表示されます。他の2つのテーブルに依存する追加の列「位置」がn個あります。
ロジックは次のとおりです。各staff_roster.r_dateをテーブル "staff_posmove"の "p_date"と比較します。システムが「r_date」が「p_date」より小さい同じスタッフを見つけた場合、「position」の値は「previous_pos」になります。それ以上であれば、値として "new_pos"を取る。
しかし、問題は「staff_posmove」に複数のレコードが存在する可能性があり、重複した条件が存在するため、重複した結果と間違った結果になります。一例として
テイクsf001は、私の予想結果は次のとおりです。
staff_no | store | r_date | position
-----------------------------------------
sf001 | A | 1/10/2016 | Jr sales
sf001 | A | 2/10/2016 | Jr sales
sf001 | A | 3/10/2016 | clerk
sf001 | A | 4/10/2016 | clerk
sf001 | A | 5/10/2016 | clerk
sf001 | A | 6/10/2016 | Sr sales
sf001 | A | 7/10/2016 | Sr sales
sf001 | A | 8/10/2016 | Sr sales
....
さらに、システムは比較のために、スタッフの「staff_posmove」のレコードが見つからない場合は、「位置」は、テーブルをルックアップする必要があり「staff_profile "結果に関連するスタッフの位置を入れて "位置":
staff_no | store | r_date | position
-----------------------------------------
sf002 | A | 1/10/2016 | Jr sales
sf002 | A | 2/10/2016 | Jr sales
....
私が何かしようとした" THEN VARCHARとして(b.previous_posをキャストCASE a.staff_no = b.staff_noとa.r_date < b.p_dateを(10))でも、依然として間違った結果が得られます。質問は少し長いかもしれませんが、あなたが助けてくれることを願っています。
ありがとうと私はこの声明の詳細を勉強します。 –