日付を含むデータ セットがあり、日付の順序が正しいかどうかを確認したいと考えています。
RecordID Date1 Date2 Date3 Date4
1 2011-05-10 2011-08-16 NULL 2011-11-22
2 NULL 2012-02-03 2012-02-27 2012-03-05
3 2011-05-30 2011-05-11 2011-08-17 2011-09-15
4 2011-05-30 NULL NULL NULL
日付が提供される場合は常に、Date1 < Date2 < Date3 < Date4 を保持する必要があります。レコードに特定の日付の NULL 値が含まれている場合、NULL でない日付の間でチェックを行う必要があります。だから、これは私が望む結果です:
RecordID Date1 Date2 Date3 Date4 CheckDates
1 2011-05-10 2011-08-16 NULL 2011-11-22 correct
2 NULL 2012-02-03 2012-02-27 2012-03-05 correct
3 2011-05-30 2011-05-11 2011-08-17 2011-09-15 incorrect
4 2011-05-30 NULL NULL NULL correct
これについては広範な CASE ステートメントを書きましたが、もっと洗練された解決策があるはずです。
CASE
WHEN Date1 IS NULL AND Date2 IS NULL AND Date3 IS NULL AND Date4 IS NULL THEN 'correct'
WHEN Date1 IS NULL AND Date2 IS NULL AND Date3 IS NULL AND Date4 IS NOT NULL THEN 'correct'
WHEN Date1 IS NULL AND Date2 IS NULL AND Date3 IS NOT NULL AND Date4 IS NULL THEN 'correct'
WHEN Date1 IS NULL AND Date2 IS NULL AND Date3 IS NOT NULL AND Date4 IS NOT NULL AND Date3 < Date4 THEN 'correct'
...
ELSE 'incorrect'
END
何か案は?
編集:
上記の最初の例の 3 つの列よりも多くの「日付」列を許可するソリューションを探しています (実際の問題では 4 つあり、問題を単純化するために 3 つに変更しました。しかし、私はこの単純化で重要な特徴を失ったようです)。4 列の例を更新しました。