2016-06-13 4 views
1

Zunächst einmal ein großes Dankeschön dafür, dass Sie dies untersucht haben.SQL-Abfrage zum Ableiten der Zeittaktdaten aus der Maßtabelle

Wir haben eine Tabelle Maßnahmen genannt, die, dass die Mitarbeiter Tätigkeit im Labor erfaßt, wie unten dargestellt:

 
╔════╦═════════╦═════════════════════╦═════════════════════╦═════════╦══════════════╗ 
║ id ║ staf_id ║  start_time  ║  stop_time  ║ task_id ║ fruit_tested ║ 
╠════╬═════════╬═════════════════════╬═════════════════════╬═════════╬══════════════╣ 
║ 1 ║  123 ║ 2016-06-01 10:00:00 ║ 2016-06-01 13:15:00 ║  1 ║   90 ║ 
║ 2 ║  123 ║ 2016-06-01 15:20:00 ║ 2016-06-01 18:30:00 ║  2 ║   60 ║ 
║ 3 ║  333 ║ 2016-06-02 10:30:30 ║ 2016-06-02 15:45:00 ║  1 ║   30 ║ 
║ 4 ║  333 ║ 2016-06-03 09:00:00 ║ 2016-06-03 09:45:00 ║  1 ║   60 ║ 
║ 5 ║  555 ║ 2016-06-01 07:00:00 ║ 2016-06-01 11:15:00 ║  1 ║   90 ║ 
║ 6 ║  555 ║ 2016-06-01 11:30:00 ║ 2016-06-01 13:00:00 ║  1 ║   30 ║ 
║ 7 ║  123 ║ 2016-06-02 10:00:00 ║ 2016-06-02 14:00:00 ║  3 ║   30 ║ 
║ 8 ║  333 ║ 2016-06-03 10:20:00 ║ 2016-06-03 13:15:15 ║  1 ║   30 ║ 
║ 9 ║  333 ║ 2016-06-04 07:50:20 ║ 2016-06-04 12:30:50 ║  1 ║   60 ║ 
║ 10 ║  555 ║ 2016-06-03 05:30:00 ║ 2016-06-03 10:00:00 ║  1 ║   60 ║ 
║ 11 ║  123 ║ 2016-06-03 06:00:00 ║ 2016-06-03 10:30:30 ║  4 ║   90 ║ 
║ 12 ║  123 ║ 2016-06-03 12:15:04 ║ 2016-06-03 12:45:50 ║  5 ║   90 ║ 
║ 13 ║  123 ║ 2016-06-03 17:10:00 ║ 2016-06-03 19:00:00 ║  1 ║   30 ║ 
║ 14 ║  123 ║ 2016-06-04 12:15:04 ║ 2016-06-04 15:00:00 ║  1 ║   30 ║ 
║ 15 ║  123 ║ 2016-06-04 15:10:00 ║ 2016-06-04 15:30:00 ║  2 ║   90 ║ 
╚════╩═════════╩═════════════════════╩═════════════════════╩═════════╩══════════════╝ 
Derzeit

, wir ein Problem mit unserem realen Zeitschaltuhr- Tisch haben, als Zwischenlösung würde Ich mag abrufen Zeituhr Details von jedem Personal für jeden Tag von der Maßtabelle, wobei der clock_in die ersten measures.start_time für den Tag und clock_out die letzten measures.stop_time für den Tag dieser Mitarbeiter wie folgt sein wird:

 
╔══════════╦═════════════════════╦═════════════════════╗ 
║ staff_id ║  clock_in  ║  clock_out  ║ 
╠══════════╬═════════════════════╬═════════════════════╣ 
║  123 ║ 2016-06-01 10:00:00 ║ 2016-06-01 18:30:00 ║ 
║  123 ║ 2016-06-02 10:00:00 ║ 2016-06-02 14:00:00 ║ 
║  123 ║ 2016-06-03 06:00:00 ║ 2016-06-03 19:00:00 ║ 
║  123 ║ 2016-06-04 12:15:04 ║ 2016-06-04 15:30:00 ║ 
║  333 ║ 2016-06-02 10:30:30 ║ 2016-06-02 15:45:00 ║ 
║  333 ║ 2016-06-03 09:00:00 ║ 2016-06-03 13:15:15 ║ 
║  333 ║ 2016-06-04 07:50:20 ║ 2016-06-04 12:30:50 ║ 
║  555 ║ 2016-06-01 07:00:00 ║ 2016-06-01 13:00:00 ║ 
║  555 ║ 2016-06-03 05:30:00 ║ 2016-06-03 10:00:00 ║ 
╚══════════╩═════════════════════╩═════════════════════╝ 

Wie erreiche ich? Dieses Ergebnis? Jeder Vorschlag würde sehr geschätzt werden.

+0

So möchten Sie die Min- und Max-Zeitstempel für jeden Benutzer für jeden Tag – Strawberry

Antwort

1

Ich denke, das ist einfach, nur eine Aggregation:

select staff_id, min(start_time) as clock_in, max(stop_time) as clock_out 
from measures 
group by staff_id, date(start_time) 
order by staff_id, min(start_time); 
+0

** Dank Gordon ** –

0
select staff_id, 
    min(start_time) clock_in, 
    max(stop_time) clock_out 
from measures 
group by staff_id,cast(start_time as date) 
order by 1,2 
+0

Wie unterscheidet von der ersten Antwort gegeben? – Nicarus

Verwandte Themen