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-ID: 432709

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

Ausgedruckt am: 22.11.2024 um 06:11 Uhr

ukulele-7
Lösung ukulele-7 26.03.2019 um 12:58:52 Uhr
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.
akretschmer
akretschmer 26.03.2019 um 13:03:13 Uhr
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
c64b311ee9
c64b311ee9 26.03.2019 um 13:55:03 Uhr
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.
akretschmer
akretschmer 26.03.2019 um 14:30:12 Uhr
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)
c64b311ee9
c64b311ee9 26.03.2019 um 14:42:55 Uhr
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!