maddy: Abfrage zum Datumsvergleich

Ich habe in einer Tabelle folgende vier Zellen. start_time, end_time, (beide YYYY-MM-DD) start_date, end_date (beide HH-MM-SS 24Stunden)

Ich möchte nun in einem Query die Summer aller Stunden ausgeben. Mein Problem liegt daran, wie ich das Datum mit einbeziehen kann

SELECT SUM( SUBTIME( end_time, start_date ) )
FROM my_table

Kann ich irgendwie zuvor end_time mit end_date verknüpfen, so dass SUBTIME die Verkettung nimmt als YYYY-MM-DD HH-MM-SS

Die Tabelle stammt nicht von mir und kann nicht geändert werden, daher bitte nicht die Frage warum man die Spalten nicht zusammenführt.

  1. Hallo,

    Ich habe in einer Tabelle folgende vier Zellen. start_time, end_time, (beide YYYY-MM-DD) start_date, end_date (beide HH-MM-SS 24Stunden)

    Kann ich irgendwie zuvor end_time mit end_date verknüpfen, so dass SUBTIME die Verkettung nimmt als YYYY-MM-DD HH-MM-SS

    ganz bestimmt geht das in Deinem Datenbankmanagementsystem (DBMS), das Du uns leider verschweigst (verwendest Du MS Access, DB2, dBase, Informix, MS SQL Server, Oracle, PostgreSQL, SQLite oder gar MySQL, dazu wäre noch die genaue Version von Interesse).

    CAST und CONVERT sind typische Kandidaten, die vorhanden sein sollten und das von Dir gewünschte erledigen könnten. Suche in der Doku Deines DBMS, ob diese Dir zur Verfügung stehen.

    Freundliche Grüße

    Vinzenz

    1. ganz bestimmt geht das in Deinem Datenbankmanagementsystem (DBMS), das Du uns leider verschweigst (verwendest Du MS Access, DB2, dBase, Informix, MS SQL Server, Oracle, PostgreSQL, SQLite oder gar MySQL, dazu wäre noch die genaue Version von Interesse).

      CAST und CONVERT sind typische Kandidaten, die vorhanden sein sollten und das von Dir gewünschte erledigen könnten. Suche in der Doku Deines DBMS, ob diese Dir zur Verfügung stehen.

      Entschuldigung :) zu doof...  MySQL 5.0

      allerdings liefer mir:

      SELECT SUM( SUBTIME( (  
        
      SELECT CONCAT_WS( ' ', end_date, end_time ) AS end_stamp ) , (  
        
      SELECT CONCAT_WS( ' ', start_date, start_time ) AS start_stamp )  
      )  
      ) AS result  
      FROM my_table  
      WHERE id  
      BETWEEN 116  
      AND 200 
      

      immer ein NULL.

      Keines der Felder hat ein NULL, alle haben ein Datum oder eine 00-00-00 Zeit.
      Auf eine Andere Lösung bin ich noch nicht gekommen...

      1. Hallo,

        CAST und CONVERT sind typische Kandidaten, die vorhanden sein sollten und das von Dir gewünschte erledigen könnten. Suche in der Doku Deines DBMS, ob diese Dir zur Verfügung stehen.

        Entschuldigung :) zu doof...  MySQL 5.0

        allerdings liefer mir:
        [code lang=sql]SELECT SUM( SUBTIME( (

        SUM ist eine Aggregatsfunktion, die in Verbindung mit einer GROUP-BY-Klausel verwendet wird. Was willst Du damit bezwecken.

        SELECT CONCAT_WS( ' ', end_date, end_time ) AS end_stamp ) , (
        Auf eine Andere Lösung bin ich noch nicht gekommen...

        Warum hast Du Dir nicht CAST und CONVERT angeschaut, die ich Dir nahegelegt habe. Es ist übrigens eine gute Idee, sich hübsch langsam von innen nach außen vorzuarbeiten:

        • Erzeuge zunächst mit CONCAT eine Zeichenkette, die der gültigen und
            gewünschten DATETIME-Angabe entspricht,
        • Wenn das funktioniert, erzeuge daraus mit CAST oder CONVERT etwas vom
            Typ DATETIME,
        • nutze anschließend die Datumsfunktionen Deiner Wahl

        Freundliche Grüße

        Vinzenz

        1. Warum hast Du Dir nicht CAST und CONVERT angeschaut, die ich Dir nahegelegt habe. Es ist übrigens eine gute Idee, sich hübsch langsam von innen nach außen vorzuarbeiten:

          Ich wollte eigentlich nur auf die DB eingehen und hab dann aber eben noch gleich einen weiteren qury gepostet.

          Leider funktioniert es nicht so, wie ich es mir vorgestellt habe... daher nochmal das Ziel des Queries:

          ich möchte aus einer Tabelle mit den genannten vier Feldern Die Gesamtstundenzahl berechnen. Die Stundenzahl ergibt sich aus den DATE & TIME Differenzen. Geht das überhaupt sinnvoll in einem Query oder sollte ich lieber mit mehrereren arbeiten?

          1. Hi,

            Leider funktioniert es nicht so, wie ich es mir vorgestellt habe...

            Vinzenz hat dir einen konkreten Vorschlag gemacht - also probiere diesen bitte umzusetzen.
            Wenn dir das nicht gelingt - dann liefere bitte eine brauchbare Problembeschreibung, und kein bloedes "funzt nich".

            daher nochmal das Ziel des Queries:

            Und bitte wiederhole nicht staendig, was du erreichen willst. Davon erledigt sich das Problem sicher nicht von selber. Sondern nur davon, dass du ausprobierst, was dir vorgeschlagen wird.

            MfG ChrisB

            --
            „This is the author's opinion, not necessarily that of Starbucks.“
            1. Vincent hat gefragt was ich mit SUM bezwecken will, also hab ich die Problemstellung nochmal komplett beschrieben, was ich in dieser Form noch nicht getan hatte.

              Warum es nicht funktioniert: SUBTIME unterstützt als zweiten Wert nur TIME was ich nicht richtig gelesen hatte. Ich kann damit also nicht die Stundenanzahl als differenz berechnen.

  2. Hi,

    einfache Logik ... wenn start_date und end_date unterschiedlich sind, dann rechnest du für start_time die differenz bis 23:59:59 und für end_time die Differenz von 00:00:00 zu end_time + (die Anzahl der absoluten vollen Tage zwischen start_date und end_date * 24h)

    Ciao, Frank