J'ai un ensemble de données avec des dates et je veux vérifier si l'ordre des dates est correct.
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
Dans tous les cas où des dates sont fournies, cela devrait tenir : Date1 < Date2 < Date3 < Date4. Lorsque l'enregistrement contient des valeurs NULL pour certaines dates, la vérification doit se faire entre les dates qui ne sont pas NULL. Voici donc le résultat que je veux :
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
J'ai écrit une déclaration CASE détaillée à ce sujet, mais il doit y avoir une solution plus élégante :
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
Des idées ?
EDIT :
Je cherche une solution qui permette d'avoir plus de colonnes 'Date' que les trois colonnes du premier exemple que j'ai donné ci-dessus (j'en ai quatre dans mon problème réel, et je les ai changées en trois pour simplifier le problème, mais il semble que j'ai perdu une caractéristique importante avec cette simplification). Mise à jour de l'exemple pour quatre colonnes.