none
min max aus einer spalte RRS feed

  • Frage

  • Hallo zusammen,

    Ich habe aktuell die folgende Herausforderung und google konnte mir bisher nicht so wirklich helfen.

    Ausgangslage ist eine Mitarbeiterliste.

    Als Spalten sind u.a. Startzeit, Endzeit und Status vorhanden.

    Nun lasse ich mir pro Status die Zeit mittels Timestampdiff rausgeben.

    Es gibt jedoch zwei Status wo ich den „min“ und bei anderen den „max“ Wert des Tages brauche.

    Also für Status „Dienstbeginn“ brauche ich min und für Status „Dienstende“ brauche ich max. Bei den anderen Status reicht mir die normale diff aus.

    Ist dies in einem select zu realisieren?

    Danke und Gruß,

    Lukas

    Freitag, 7. Dezember 2018 10:48

Antworten

Alle Antworten

  • Dies kannst du auch mittels Aggregaten tun, da Aggregate miteinander verrechenbar sind:

    (SUM(VALU1) + SUM(VALUE2)) / AVG(VALUE3)

    Da die Funktion 2 Timestamps benötigt, kann man diese vorher mittels Aggregsat ermitteln und an die Funktion weitergeben:

    DATEDIFF(day, min(Date1), min(date2))

    Freitag, 7. Dezember 2018 10:53
  • so etwas? (ohne datentyp datetime)

    declare @t table (Status varchar(20), StartZeit decimal(5,2), EndZeit decimal(5,2))
     insert into @t(Status, StartZeit, EndZeit)
     values('Beginn',8,null),('Ende',null,12),('Pause',9,10),('Beginn',7,null),('Ende',null,11.5),('Pause',9.5,10)
    
    select Status, iif(status='Beginn',min(StartZeit),null) minBeginn
    , iif(status='Ende',max(EndZeit),null) maxEnde
    , convert(decimal(5,2),null) Differenz
    from @t
    where Status in ('Beginn','Ende')
    group by Status
    union all
    select Status, StartZeit
    , EndZeit, EndZeit-StartZeit Differenz
    from @t
    where Status not in ('Beginn','Ende')
    

    Freitag, 7. Dezember 2018 11:21
  • die Zeit mittels Timestampdiff rausgeben

    Hallo Lukas,

    so eine Funktion gibt es im MS SQL Server nicht; nutzt Du also MySQL?


    Olaf Helper

    [ Blog] [ Xing] [ MVP]


    Freitag, 7. Dezember 2018 11:45
  • Ja, nutze HeidiSQL für die Abfrage.

    Danke für die Vorschläge aber leider ist dies so nicht möglich.

    Es handelt sich hierbei um eine Telefonanlage, welche den Status trackt. Somit kommt es vor, dass Mitarbeiter A z.B. aus technischen Gründen (PC Absturz etc.) autom. ein Status  Dienstende generiert um kurz darauf wieder einen Status Dienstbeginn mit (PC Neustart) auszulösen. Entsprechend kann es pro Mitarbeiter mehrere Dienstbeginn und Dienstende Status an einem Tag geben. Deshalb benötige ich die o.g. min/max Ausgabe für den jeweiligen Status separat.

    • Bearbeitet lookazz Freitag, 7. Dezember 2018 12:28
    Freitag, 7. Dezember 2018 12:15
  • Min/Max sind Aggregat-Funktionen die ohne einen GroupBy nicht auskommen, da diese Aggregate aus mehreren Zeilen einen Wert auswählen.

    Ggf. ist das was du meinst kein Aggregat sondern eine scalare MAX-Funktion aus 2 oder mehreren Werten.
    Dies hängt dann vom Dialekt ab, ob MAX als scalare Funktion vorhanden ist.
    Manchmal gibts auch MAX_VALUE(V1, V2,...).

    Ggf. cannst du auch mit Case arbeiten:

    case when date1 > date2 then date1 else date2 end

    Diese Ausdrücke sind dann direkt als Funktionsargumente zu verwenden.

    case when date1 > date2 then date1 else date2 end - case when date3 > date4 then date4 else date3 end

    Freitag, 7. Dezember 2018 12:31
  • Hi,

    MySQL <> Microsoft SQL Server. Und da sich die SQL Syntax bzw. die zur Verfügung stehenden Methoden erheblich voneinander unterscheiden, bist Du hier leider falsch.

    Stell die Frage bitte in einem MySQL Forum.


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET (2001-2018)
    https://www.asp-solutions.de/ - IT Beratung, Softwareentwicklung, Remotesupport

    Freitag, 7. Dezember 2018 15:10
    Moderator