Announcement

Collapse
No announcement yet.

Summen für einen bestimmten Zeitabschnitt ermitteln

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Summen für einen bestimmten Zeitabschnitt ermitteln

    Wer kann helfen? Ich habe eine Abfrage aus zwei Tabellen erstellt. Die Tabelle db_gastgeber enthält Objekte und die Tabelle db_gastgeber_belegung enthält Nutzungszeiten in der Form 'von' und 'bis' in Datumsformat 'Y-m-d'. Nun will ich die Nutzung jedes Objektes für die letzten 365 Tage berechnen. Je Objekt.

    HTML Code:
    SELECT SUM( TO_DAYS(  `a`.`bis` ) - TO_DAYS(  `a`.`von` ) ) AS  'tage',  `a`.`obj_nr` ,  `db`.`*` 
    FROM  `db_gastgeber` AS  `db` 
    LEFT JOIN  `db_gastgeber_belegung` AS  `a` ON  `db`.`obj_nr` =  `a`.`obj_nr` 
    WHERE  `db`.`on` =1
    AND  `a`.`von` > DATE_SUB( CURDATE( ) , INTERVAL 1 YEAR ) 
    GROUP BY  `db`.`obj_nr` 
    ORDER BY  `tage` DESC ,  `db`.`obj_nr`
    Es gibt keine Fehleranzeige. Aber die Tage stimmen nicht. In 365 Tagen 480 Tage genutzt, geht irgend wie nicht. Wo liegt der Haken?

    Würde mich über Unterstützung sehr freuen.

  • #2
    Hallo,
    Originally posted by coastbike View Post
    ...Wo liegt der Haken?
    In deiner Gruppierung! Du selektierst neben a.obj_nr auch db.* - gruppierst jedoch nach db.obj_nr. Jede andere DB würde dir das als Gruppierungsfehler anmeckern.

    Gruß Falk
    Wenn du denkst du hast alle Bugs gefunden, dann ist das ein Bug in deiner Denksoftware.

    Quellcode ohne ein Mindestmaß an Formatierung sehe ich mir nicht an! Ich leiste keinen Privatsupport per Mail oder PN!

    Comment


    • #3
      Summen für einen bestimmten Zeitabschnitt ermitteln

      Danke, Falk, für diesen Hinweis. Geändert jetzt in
      HTML Code:
      SELECT SUM( TO_DAYS(  `a`.`bis` ) - TO_DAYS(  `a`.`von` ) ) AS  'tage',  `a`.`obj_nr` ,  `db`.`*` 
      FROM  `db_gastgeber` AS  `db` 
      LEFT JOIN  `db_gastgeber_belegung` AS  `a` ON  `db`.`obj_nr` =  `a`.`obj_nr` 
      WHERE  `db`.`on` =1 AND  `a`.`von` > DATE_SUB( CURDATE( ) , INTERVAL 1 YEAR ) 
      GROUP BY  `a`.`obj_nr`
      ORDER BY  `tage` DESC ,  `db`.`obj_nr`
      Trotzdem sind noch Objekte dabei, die über 365 Tage haben. Für die Auswertung ist es wichtig, nur die Tage aus dem Zeitfenster der letzten 365 Tage zu ermitteln.

      Comment


      • #4
        Hallo,
        Originally posted by coastbike View Post
        Danke, Falk, für diesen Hinweis. Geändert jetzt in...
        Wo ist der Unterschied? Und bitte beachten: Formatierung von SQL in Beiträgen

        Gruß Falk

        P.S.: Ich find es immer wieder putzig, wenn Leute sich zwar für Hinweise bedanken, diese jedoch großzügig ignorieren um dann die Ausgangsfrage nochmnal zu stellen...
        Wenn du denkst du hast alle Bugs gefunden, dann ist das ein Bug in deiner Denksoftware.

        Quellcode ohne ein Mindestmaß an Formatierung sehe ich mir nicht an! Ich leiste keinen Privatsupport per Mail oder PN!

        Comment


        • #5
          Originally posted by coastbike View Post
          Trotzdem sind noch Objekte dabei, die über 365 Tage haben. Für die Auswertung ist es wichtig, nur die Tage aus dem Zeitfenster der letzten 365 Tage zu ermitteln.
          Das machst Du ja auch, aber Deine Abfrage berücksichtigt nur den Startpunkt des Zeitfensters, nicht die Länge. D.h. der "bis" Wert kann laut Abfrage Tage, Monate, Jahre in der Zukunft liegen. Ob das durch Constraints oder Business Logik verboten ist bzw. sein soll, kann man hier nicht ablesen.
          Gib die Operanden der Datumsarithmetik einfach zur Probe mit aus. INTERVAL 1 YEAR sollte eigentlich als INTERVAL '1' Year formuliert werden. Die Gruppierungsproblematik wurde ja bereits angesprochen.
          Gruß, defo

          Comment

          Working...
          X