2017-07-11 5 views
1

Ich versuche, die Arbeitsstunden für jeden Mitarbeiter mit dem Swipe-Bericht basierend auf dem EventType (In oder Out) mit VBA/SQL zu erhalten.VBA für die Berechnung der Differenz bei Shift Stunden Berechnung

Bis jetzt habe ich die Gesamtanmeldezeiten, aber nicht in der Lage, die Zwischenbrüche von der Enter/Exit Split zu berechnen. Kann mir bitte jemand helfen, in eine richtige Richtung zu zeigen.

SELECT 
    StaffMember, Date, 
    min(EventDateTime) as Max_In, 
    max(EventDateTime) as Max_Out, 
    (max(EventDateTime)- min(EventDateTime))*24 as Whrs 
From [data$] 
group by StaffMember, Date 

Example Set

+0

Welche RDMBS verwenden Sie? Dies sieht wie SQL Server aus. Sehr wichtig, da sich SQL-Dialekte in Datenbanken unterscheiden. – Parfait

Antwort

1

Wenn Ihr SQL Geschmack Fensterfunktionen unterstützt Sie es so nähern können:

SELECT Entrances.StaffMember, 
     EnterTime, 
     ExitTime, 
     ExitTime - EnterTime As TimeBetween 
    FROM (SELECT StaffMember, 
       EventDateTime As EnterTime, 
       ROW_NUMBER() OVER 
       (PARTITION BY StaffMember 
         ORDER BY EventDateTime ASC 
       ) As EnterRnk 
      FROM data 
     WHERE EventType = 'Enter' 
     ) AS Entrances 
INNER /* 
     Or left join and coalesce to a high value 
     if you don't want to drop anything 
     */ 
    JOIN (SELECT StaffMember, 
       EventDateTime As ExitTime, 
       ROW_NUMBER() OVER 
       (PARTITION BY StaffMember 
         ORDER BY EventDateTime ASC 
       ) As ExitRnk 
      FROM data 
     WHERE EventType = 'Exit' 
     ) AS Exits 
    ON Entrances.StaffMember = Exits.StaffMember 
    AND Entrances.EnterRnk = Exits.ExitRnk 

Sonst wirst du haben, um zu sehen, ob es rekursive Abfragen unterstützt.

Verwandte Themen