ich suche gerade einen eleganten Weg, wie ich das jüngste Datum von drei Feldern ermitteln kann.
SELECT ID ,Datum1 ,Datum2 ,Datum3 ,[Magie geschieht hier] as JüngstesDatumVonDenDrei FROM Tabelle
Datum1 gibt es immer, Datum2 und Datum3 können NULL sein. Irgendwie steh ich auf dem Schlauch, da muss es doch was schöneres geben, als das alles in einem großen Case zu verschachteln!?
Aktuelle Lösung:
CASE WHEN (isnull(Datum2, Datum1) < isnull(Datum3, Datum1)) THEN Datum2 WHEN (isnull(Datum2, Datum1) > isnull(Datum3, Datum1)) THEN Datum3 ELSE Datum1 END as JüngstesDatumVonDenDrei
Ich halte das nicht für ein gutes Modell, auch wenn es nur um drei Felder geht, von denen zwei möglicherweise "leer stehen". Sauber im Sinne relational gut aufgebaut wäre, in einer eigenen Tabelle Dates zur ID sowieso zu sammeln. Das verkompliziert natürlich dann den FROM-Teil deiner Query, du brauchst dann einen LEFT JOIN. Dafür wird aus der Ermittlung des jüngsten Datums dann aber ein schlichtes select max(date) AS NewestDate from dates where id = 2.
Wenn die Abfrage rundherum noch komplexer ist, das schreibst du ja nicht, wirst du mit Aggregatfunktionen nicht glücklich, dann musst du jedes im SELECT angeforderte Feld im WHERE nennen, auf das du keine Aggregatfunktion loslässt. Es kann deshalb sein, dass du die Ermittlung des jüngsten Datums in einer geschachtelten Abfrage oder in einer gespeicherten Query / View kapseln musst. Also einfacher ist das nicht unbedingt.
Dein Wort in Entwicklers Ohr. Die Datenbank ist leider nicht "unsere", sondern kommt von einem externen Programm. Wenn du das schon "nicht gut" findest, dann könnte ich dir da noch ganz andere Horrorszenarien aus der Welt des Datenbankdesigns liefern. ;)
@Feroc: Danke, ich bin schon bedient. Unser Produkt ist dabei (tatsächlich!) eine Ausnahme, das ist technisch gesehen ziemlich sauber. Nein, ich bin nicht in unserer Marketingabteilung tätig.