c64b311ee9
Goto Top

SQL 3 Bedingungen

Moin Moin,

ich habe mal eine Frage...
Ich habe 1 Tabelle mit folgenden Daten

[Coming Clocking] Kommen Zeit
[Leaving Clocking] Gehen Zeit
[Break Clocking] Pause

Mitarbeiter Nr. | Kommen Zeit | Gehen Zeit | Pause
368 06:07 15:17 08:20
00:00 00:00 08:25
00:00 00:00 00:00
346 07:07 14:32 00:00
00:00 00:00 00:00
377 06:30 15:51 00:00

Jetzt will ich die Datensätze, in der alle 3 Werte 00:00 sind rausfiltern. Mein Ergebnis sollte so aussehen:

Mitarbeiter Nr. | Kommen Zeit | Gehen Zeit | Pause
368 06:07 15:17 08:20
00:00 00:00 08:25
346 07:07 14:32 00:00
377 06:30 15:51 00:00

SELECT* FROM.....
WHERE
(CONVERT(CHAR(5),[Coming Clocking], 108) <> '00:00' AND CONVERT(CHAR(5),[Leaving Clocking],108) <> '00:00' AND CONVERT(CHAR(5),[Break Clocking],108)<> '00:00')

ich dachte, mit einem einfachen AND Operator komme ich da weiter, aber dann sehen meine Ergebnisse so aus:

Mitarbeiter Nr. | Kommen Zeit | Gehen Zeit | Pause
368 06:07 15:17 08:20
346 07:07 14:32 00:00
377 06:30 15:51 00:00

Kann mir jemand helfen? :D

Content-Key: 432709

Url: https://administrator.de/contentid/432709

Printed on: April 28, 2024 at 07:04 o'clock

Member: ukulele-7
Solution ukulele-7 Mar 26, 2019 at 11:58:52 (UTC)
Goto Top
Sieht aus wie MSSQL, ist es das?

Sieht aus als wären die drei Spalten alle im Format TIME, ist das so?

Deine Bedingung sagt das alle Spalten ungleich 0 sein müssen, du müsstest wohl eher mit OR verknüpfen um Fälle, wo eine der Spalten ungleich 0 ist, mit anzuzeigen.
Member: akretschmer
akretschmer Mar 26, 2019 at 12:03:13 (UTC)
Goto Top
  • warum speicherst Du das als Text un dnicht als Timestamps? (kommen, gehen)
  • warum kein Interval für die Pausendauer?
  • 00:00 ist eine valide Zeit, was ist, wenn da wirklich einer anfängt? Für nicht gebucht, also unbekannt, solltest Du NULL verwenden
Member: c64b311ee9
c64b311ee9 Mar 26, 2019 at 12:55:03 (UTC)
Goto Top
Hallo,

habe es jetzt wie ukulele-7 beschrieben hat gemacht. Da habe ich wohl den Wald vor lauter Bäumen...
zu 1. hm, einfach so, macht das denn so den großen Unterschied?
zu 2. Die Pause ist variabel, und es gibt ein paar Raucher...
zu 3. frühestens fängt bei uns einer um 05:00 an wenn ich mit NULL filter erhalte ich garkeineErgebnisse mehr.
Member: akretschmer
akretschmer Mar 26, 2019 at 13:30:12 (UTC)
Goto Top
1. ja, das macht einen Unterschied. Mit richtigen Datentypen kann man dann auch richtig arbeiten
2. ja, und? Ist das die Pausen-Dauer oder der Pausen-Start? wie lang ist die Pause?
3. dann hoffen wir mal, daß ihr in der Zukunft nicht wachsen werdet, und es kein 24-Stunden-Betrieb geben wird. Denn dann fliegt Euch das um die Ohren.

test=*# select * from c64 ;
 ma  |       coming        |       leaving       |  break   
-----+---------------------+---------------------+----------
 368 | 2019-03-26 06:07:00 | 2019-03-26 15:17:00 | 08:20:00
 368 |                     |                     | 08:20:00
 368 |                     |                     | 
(3 rows)

test=*# select *, leaving-coming-break as time from c64 where not (coming is null and leaving is null and break is null);
 ma  |       coming        |       leaving       |  break   |   time   
-----+---------------------+---------------------+----------+----------
 368 | 2019-03-26 06:07:00 | 2019-03-26 15:17:00 | 08:20:00 | 00:50:00
 368 |                     |                     | 08:20:00 | 
(2 rows)
Member: c64b311ee9
c64b311ee9 Mar 26, 2019 at 13:42:55 (UTC)
Goto Top
1. Okay
2.Pause wird in eine Spalte geschrieben. Der erste Eintrag ist immer Start und der darauffolgende Stop.
3. Ja, ist unwahrscheinlich aber ich probiere es nochmal, ich lerne gerne dazu.

Danke für deine Hilfe!