| 

.NET C# Java Javascript Exception

3
Moin,

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
News:
21.02.2012
Feroc 1,2k 2 9
Feroc 1,2k 2 9
2 Antworten
2
Ich glaube deine Lösung ist schon ziemlich das Optimum. Hier ein Thread auf SO mit mehreren Lösungsvarianten.
21.02.2012
puls200 3,8k 7
1
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.
22.02.2012
mupan 575 1 8
mupan 575 1 8
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 23.02.2012
@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.
mupan 23.02.2012

Stelle deine Sql-server-2008-Frage jetzt!