tutorials.de Buch-Aktion 05/2012
ERLEDIGT
NEIN
ANTWORTEN
6
ZUGRIFFE
781
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    charlie2009 charlie2009 ist offline Grünschnabel
    Registriert seit
    Sep 2009
    Beiträge
    4
    Hallo,

    das ist der erste Eintrag in diesem Forum und ich hoffe Ihr könnt mir weiterhelfen. Mein Problem bekomme ich einfach nicht gelöst.

    Ich habe eine mySQL DB wo zu jeder vollen Stunde ein Datensatz hinzukommt. Nun möchte ich die Datensätze nach Jahren und Monaten gruppieren, was auch schon funktioniert.

    Code :
    1
    2
    3
    4
    
    SELECT *
    FROM `table`
    where year(datum) >'2007'
    GROUP BY YEAR(`datum`), MONTH(`datum`)

    Das Problem ist nur, dass der gruppierte Monat den erste Tag zur ersten Stunde, also im Format 'YYYY-MM-01 00:00:00' anzeigen soll. Das hat die ersten Monate scheinbar zufällig mit der obrigen Abfrage funktioniert, aber seit 3 Monaten steht als Ergebnis irgend ein Tag dort.

    Habt Ihr eine Idee, wie man das machen könnte?

    MfG
    Charlie2009
     

  2. #2
    Avatar von RaVenC
    RaVenC RaVenC ist offline Mitglied Silber
    Registriert seit
    May 2008
    Beiträge
    82
    Hmm
    warum möchtest du das Gruppieren?
    Zum ordnen?
    Wenn ja, dann könntes du mal das versuchen:

    Code sql:
    1
    2
    3
    4
    5
    
     
    SELECT *
    FROM `table`
    WHERE YEAR(datum) >'2007'
    ORDER BY UNIX_TIMESTAMP(datum) ASC
    bzw DESC wenn es absteigend sein soll

    Ansonsten:
    Code sql:
    1
    2
    3
    4
    
    SELECT *
    FROM `table`
    WHERE YEAR(datum) >'2007'
    GROUP BY YEAR(`datum`), MONTH(`datum`), DAY(`datum`), HOUR(`datum`)
    Geändert von RaVenC (14.09.09 um 20:56 Uhr)
     
    Sollte mein Beitrag geholfen haben (ausnahmsweise :D ), dann bitte mal nen Danke hinterlassen ^^

  3. #3
    charlie2009 charlie2009 ist offline Grünschnabel
    Registriert seit
    Sep 2009
    Beiträge
    4
    Danke für die Antwort, aber geht leider noch nicht.

    Also mit der richtigen SQL Ausgabe mache ich noch einen Left Join, der aber nur funktioniert, wenn der erste des Monat und 00:00 angezeigt wird. Die Select Abfrage ist auch nur ein Beispiel. Dort werden normalerweise die Summen und Durchschnittswerte vom ganzen Monat erfasst. Ich habe das nur nicht erwähnt, um keine Verwirrung zu stiften.

    Mfg
    Charlie2009
     

  4. #4
    Registriert seit
    Dec 2001
    Ort
    Bayern
    Beiträge
    5.806
    Blog-Einträge
    5
    Hallo,

    wenn ein Datensatz für jede Stunde existiert, dann müsste es doch reichen, anstatt `datum` einfach MIN(`datum`) zu selektieren, oder?

    Grüße, Matthias
     
    „Gib einem Menschen einen Fisch, und er wird für einen Tag satt. Lehre ihn Fischen, und er wird ein Leben lang satt.“
    “For every complex problem, there is an answer that is short, simple and wrong.”
    “Pessimism is safe, but optimism is a lot faster!”


    Aktuelles Coding Quiz: #17 - Wörter kreuz und quer

  5. #5
    charlie2009 charlie2009 ist offline Grünschnabel
    Registriert seit
    Sep 2009
    Beiträge
    4
    Ja, er zeigt es dann zwar an, aber mir fehlt der "link2", der nur am ersten um 00:00 vorhanden ist. Mit dem Wert sollte dann ein Left Join gemacht werden.

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    
    id  datum                 wert1 wert2   link1   link2
    7364    2009-01-01 00:00:00     62  -4  3   3
    8108    2009-02-01 00:00:00     45  -1  4   3
    8780    2009-03-01 00:00:00     3   6   4   3
    9524    2009-04-01 00:00:00     0   4   5   4
    10244   2009-05-01 00:00:00     0   11  5   4
    10988   2009-06-01 00:00:00     0   16  5   4
    11708   2009-07-01 00:00:00     0   19  5   4
    15494   2009-08-31 21:00:00     0   18  5   0
    15793   2009-09-13 08:00:00     0   14  5   0

    Im Datensatz mit der ID vom ersten Tag des Monats um 00:00 Uhr steht auch ein link2 und diesen brauche ich, um einen Left Join zu machen. Es geht also nicht nur um die reine Anzeige. Komischerweise funktioniert es seit 2 Monaten nicht mehr. Es muss also so gruppiert werden, dass der erste Datensatz des Monats angezeigt wird. Die Werte1 und 2 kann ich mir dann mit Sum() um AVG() für den Monat errechnen lassen.

    MfG
    Charlie2009
    Geändert von charlie2009 (14.09.09 um 22:36 Uhr)
     

  6. #6
    Registriert seit
    Dec 2001
    Ort
    Bayern
    Beiträge
    5.806
    Blog-Einträge
    5
    Hallo,

    dann probier es mal so:
    Code sql:
    1
    2
    3
    4
    5
    6
    
    SELECT * FROM `table`
    WHERE `datum` IN (
      SELECT MIN(`datum`) FROM `table`
      WHERE YEAR(`datum`) > 2007
      GROUP BY YEAR(`datum`), MONTH(`datum`)
    )

    Grüße, Matthias
     
    „Gib einem Menschen einen Fisch, und er wird für einen Tag satt. Lehre ihn Fischen, und er wird ein Leben lang satt.“
    “For every complex problem, there is an answer that is short, simple and wrong.”
    “Pessimism is safe, but optimism is a lot faster!”


    Aktuelles Coding Quiz: #17 - Wörter kreuz und quer

  7. #7
    charlie2009 charlie2009 ist offline Grünschnabel
    Registriert seit
    Sep 2009
    Beiträge
    4
    Hallo,

    bei der Abfrage stürzt phpmyadmin regelrecht ab. Deshalb habe ich gestern auch nicht mehr geantwortet, weil ich dann jedesmal keinen Zugriff mehr hatte. Heute habe ich es auf meinem lokalen Rechner getestet und es passiert das gleiche. Erst nachdem ich Firefox neu starte kann ich wieder auf die DB zugreifen.

    MfG
    Charlie2009
     

Ähnliche Themen

  1. [Excel 2007] Gruppieren nach Monat
    Von Klein0r im Forum Office-Anwendungen
    Antworten: 5
    Letzter Beitrag: 27.01.09, 22:15
  2. Datensätze nach Jahr und Monat filtern
    Von Html im Forum Relationale Datenbanksysteme
    Antworten: 1
    Letzter Beitrag: 07.11.07, 20:50
  3. Antworten: 5
    Letzter Beitrag: 15.10.07, 16:56
  4. Antworten: 0
    Letzter Beitrag: 24.07.05, 16:28

Stichworte