MS SQL Kleinstes Datum einer Zeile aus mehreren Spalten ermitteln

Hallo zusammen, ich habe hier eine Tabelle mit mehreren Datumspalten. Ich möchte nun für jede Zeile ) den jeweilig niedrigsten Datumswert aus 3 Spalten ermitteln und als neues Feld ausgeben.

ID_Datum 1_Datum 2_Datum 3
1__21.1.18__22.1.18___23.1.18
2__19.2.18__20.1.18___17.1.18

Ergebnis wäre dann:
ID __kleinstes Datum
1 ___21.1.18
2 ___17.1.18

Hat jemand eine Idee? Damit könnte ich zumindest versuchen, alleine weiter zu machen :smile:
Dank und Grüße
Olli

SELECT 
       CASE WHEN Datum_1 <= Datum_2 AND Datum_1 <= Datum_3 THEN Datum_1
            WHEN Datum_2 <= Datum_1 AND Datum_2 <= Datum_3 THEN Datum_2
            ELSE Datum_3 
       END AS MinDatum
FROM MyTable

*wink

Hi!

Es geht noch einfacher:

select min(least(datum_1,datum_2,datum_3)) as mindatum
from mytable

Grüße,
Tomh

Die LEAST Funktion gibt es allerdings nicht in SQL Server, sondern nur in MySQL und Oracle.

OK, vielen Dank. Etwas schlankes für MS SQL wäre natürlich schön :smile:

Du kannst den Vergleich auch in eine Funktion auslagern:

CREATE FUNCTION LeastDate (@d1 datetime, @d2 datetime, @d3 datetime)
RETURNS datetime
AS
BEGIN
    DECLARE @least datetime

    IF @d1 is null or @d2 is null or @d3 is null
        SET @least = null
    ELSE IF @d1 < @d2 and @d1 < @d3
        SET @least = @d1
    ELSE IF @d2 < @d1 and @d2 < @d3
        SET @least = @d2
    ELSE
        SET @least = @d3

    RETURN @least
END;
GO

SELECT LeastDate (Datum_1, Datum_2, Datum_3) AS MinDatum
FROM MyTable
1 Like

Hi !

Kommt davon, wenn man die Überschrift schlampig liest.
In SQL Server (hatte nur mal vor über 15 Jahren damit zu tun), gibt es witklich keine äquivalente Funktion? (bin ich froh, mit Oracle zu arbeiten :wink:)

Grüße,
Tomh