none
größter wert aus mehreren Spalten ermitteln ? RRS feed

  • Frage

  • Hallo,

    folgendes Problem, bei dem ich etwas Hilfe bräuchte.

     

    Durch einen Join kommt es dazu, das ich mehrere Datums-Spalten zur Verfügung habe. Nun möchte ich in einem anschließenden Select (view) nur noch eine Datum Spalte haben und zwar gefüllt mit dem höchsten Wert dieser 3 Spalten.

    Also nicht Max(Spalte1) sonder Max aus Spalte1 Spalte2 und Spalte3 (und das für jeden Datensatz)

     

    Danke Gruß Andre

     

    Mittwoch, 30. Juni 2010 08:00

Antworten

  • Hallo Andre,

    das kannst Du über einen CASE Ausdruck erledigen:

    SELECT ...,
    	CASE 
    	WHEN Datum1 > Datum2 AND Datum1 > Datum3 THEN Datum1 
    	WHEN Datum2 > Datum1 AND Datum2 > Datum3 THEN Datum2
    	ELSE Datum3 
    	END AS MaxDatum
    FROM ...
    
    Gruß Elmar

    Mittwoch, 30. Juni 2010 08:49
    Beantworter
  • Danke an Euch beiden.

     

    Ich hab es inzwischen mit einem Case gelöst. Hatte irgendwie die Hoffnung, das das Eleganter geht.

     

    Gruß Andre

    Mittwoch, 30. Juni 2010 13:32

Alle Antworten

  • Hallo Andre,

    das kannst Du über einen CASE Ausdruck erledigen:

    SELECT ...,
    	CASE 
    	WHEN Datum1 > Datum2 AND Datum1 > Datum3 THEN Datum1 
    	WHEN Datum2 > Datum1 AND Datum2 > Datum3 THEN Datum2
    	ELSE Datum3 
    	END AS MaxDatum
    FROM ...
    
    Gruß Elmar

    Mittwoch, 30. Juni 2010 08:49
    Beantworter
  • Eine weitere Möglichkeit, wenn vielleicht auch nicht so ganz performant:

    create table test (ID int identity(1,1),Datum1 datetime null, datum2 datetime null, datum3 datetime null)

    insert into test
    values ('20100601','20100602','20100603'),
           ('20100607','20100602','20100603'),
           ('20100604','20100606','20100605')

    create function fnctMaxDatum (@ID int)
    returns datetime
    as
    begin
    declare @maxdat datetime
    select @maxdat = MAX(datum) from (
    select id, Feld, Datum from (select ID, Datum1, Datum2, Datum3 from test where ID = @id) p
    unpivot (Datum  for Feld in (Datum1, Datum2, Datum3) )as unpvt) x
    return @maxdat
    end

    select *, dbo.fnctMaxDatum(ID) as maxdat from test

    Mittwoch, 30. Juni 2010 12:55
  • Danke an Euch beiden.

     

    Ich hab es inzwischen mit einem Case gelöst. Hatte irgendwie die Hoffnung, das das Eleganter geht.

     

    Gruß Andre

    Mittwoch, 30. Juni 2010 13:32
  • Hallo Andre,

    Eleganz ist an der Stelle fehl am Platze.
    Und SQL ist nunmal etwas langatmiger in der Schreibweise,
    das hat es mit COBOL gemein ;-)

    Gruß Elmar

    Mittwoch, 30. Juni 2010 14:22
    Beantworter