Seite 1 von 1

SQL-Frage

Verfasst: Sonntag 11. Oktober 2020, 13:50
von Mr_C
Hallo,

ich benötige einmal die Hilfe bei der Bildung eines SQL-Befehls.

Folgende Ausgangstabelle:
  • [Name
  • Urlaub start
  • Urlaub ende
  • Anzahl Urlaubstage
  • Strandurlaub
  • Städtereise
Nun würde ich gerne filtern wollen. Wer ist aktuell im Urlaub? Also bei welchem Datensatz befindet sich das heutige Datum im Bereich (Urlaub start / Urlaub ende).
Die gefundenen Datensätze würde ich gerne zählen. Also würde ich eine Count-Variante nutzen wollen. Im Zweifel könnte ich aber auch via Python die Anzahl der Datensätze zählen.

Habt ihr einen Ansatz, denen ich wohl nutzen kann?

Danke!

Re: SQL-Frage

Verfasst: Sonntag 11. Oktober 2020, 14:06
von __blackjack__
@Mr_C: Das ist ja eher SQL und keine Python-Frage. Und in SQL wirklich ziemlich grundlegend. Was hast Du denn schon und wo ist das konkrete Problem dabei? Du brauchst ein SELECT, eine Aggregatfunktion zum zählen, den Tabellennamen, eine Funktion die das aktuelle Datum ermittelt, einen Test ob das zwischen Start und Ende liegt, und das war's ja auch schon. Für das aktuelle Datum gibt es im SQL-Standard eine Funktion. Da musst Du eventuell schauen ob Dein verwendetes DBMS die bietet oder ob man da eine andere nicht-standardisierte Funktion hat.

Re: SQL-Frage

Verfasst: Sonntag 11. Oktober 2020, 14:08
von __deets__
Start <= Jetzt AND Jetzt <= Ende

Die Tage sind redundant, die errechnen sich trivial aus Ende – Start. Und die beiden Spalten für die Art sind auch ungünstig, da nimmt man eine Spalte, und deren Werte sind dann eben Städtereise, Strandurlaub oder dann auch mal Weltraumurlaub. Ohne das man and der Tabelle Schrauben muss.

Re: SQL-Frage

Verfasst: Sonntag 11. Oktober 2020, 14:39
von __blackjack__
Wobei es für „zwischen Start und Ende inklusive“ auch eine Möglichkeit in SQL gibt wo man `Jetzt` nicht zweimal hinschreiben muss.

Anzahl der Urlaubstage ≠ Anzahl der Tage zwischen Start und Ende. Nicht jeder Tag zählt als Urlaubstag, dazu müsste man die regulär vereinbarten Wochenarbeitstage und die Feiertage kennen.

Mir fehlt in der Tabelle noch ein Primärschlüssel (der hoffentlich nicht der Name ist) und anstelle des Namens würde man bei einem DB-Entwurf in Normalform auch eine ID in eine Namenstabelle erwarten.

Re: SQL-Frage

Verfasst: Sonntag 11. Oktober 2020, 15:28
von __deets__
Kann man in SQL auch einfach verketten? Also a < b< c? Oder welcher Operator fällt mir gerade nicht ein?

Mit den Tagen hast du natürlich recht 🤦‍♂️

Re: SQL-Frage

Verfasst: Sonntag 11. Oktober 2020, 15:44
von __blackjack__
Dir fällt ``… BETWEEN … AND …`` gerade nicht ein. 🙂

Re: SQL-Frage

Verfasst: Sonntag 11. Oktober 2020, 15:55
von __deets__
Puhh. Das habe ich auch noch nie benutzt. Ob ich jetzt "BETWEEN" lieber tippe als zweimal <= ...

Re: SQL-Frage

Verfasst: Sonntag 11. Oktober 2020, 17:37
von __blackjack__
Es ist trotzdem kürzer weil Du musst ja `Jetzt` zweimal tippen und das tatsächliche `Jetzt` ist ein längerer Funktionsname. Das sind 11 Zeichen mehr!!!1elf! 😀

Re: SQL-Frage

Verfasst: Montag 9. November 2020, 18:04
von naheliegend
Habe BETWEEN auch noch nie benutzt. Fühlt sich einfach falsch an :D

Re: SQL-Frage

Verfasst: Montag 9. November 2020, 18:40
von Sirius3
@naheliegend: für Dich fühlt es sich falsch an, wenn Du für die Frage ob etwas ZWISCHEN Start und Ende liegt in einer Abfrage BETWEEN zu benutzen?

Re: SQL-Frage

Verfasst: Montag 9. November 2020, 19:21
von DasIch
BETWEEN ist meiner Meinung nach tatsächlich etwas problematisch weil nicht so deutlich ist ob es inklusive order exclusive Start und Ende ist. Das ist deutlicher wenn man einfach `start <= dt AND dt <= end` nutzt, was äquivalent zu between wäre.