nemoinho: Zählen wie viele Einträe pro Datum vorhanden sind

Hallo alle zusammen,

ich habe ein kleines Problem mit einer MySQL-Tabelle.
Ich möchte aus dieser Tablle eine Ausgabe Tabelle erzeugen, die mir pro Zeile angibt wie viele Einträge es pro Datum gibt, sprich die Tabelle sieht etwa so aus:

+-------------------+
|datum              |
+-------------------+
|2010-02-22 09:17:55|
|2010-02-22 11:15:14|
|2010-02-23 17:17:05|
|2010-02-25 14:05:58|
|2010-02-25 13:15:16|
|2010-02-25 17:01:48|
|2010-02-26 14:32:20|
usw.

Nun hätte ich gerne eine Ausgabetabelle, welche so aussieht:

+----------+------+
|datum     |anzahl|
+----------+------+
|2010-02-22|2     |
|2010-02-23|1     |
|2010-02-24|0     | (Diese Zeile muss nicht da sein, es wäre aber gut)
|2010-02-25|3     |
|2010-02-26|1     |
usw.

Ich habe da bisher viel mit EXTRACT rumexperimentiert, sodass auch schon dieses Gebilde entstanden ist, aber damit bekomme ich nicht so wirklich das ergebnis, welches ich haben wollte:

SELECT COUNT( EXTRACT( DAY FROM `datum` ) ) ,  
EXTRACT( DAY FROM `datum` ) ,  
EXTRACT( MONTH FROM `datum` )  
FROM `tabelle`  
GROUP BY EXTRACT( MONTH FROM `datum` ),  
EXTRACT( DAY FROM `datum` )

Ich hoffe ihr könnt mir helfen, leider bin ich in SQL ein ziemlicher Novize.
Danke schonmal für eure Hilfe.

mfG Felix Nehrke

P.S.: Besuche unseren Blog:  http://www.pommes-blog.de

--
Manchmal gibs was neues :)
fo:| ch:| rl:( br:> n4:? ie:( va:) de:> zu:) fl:( ss:| ls:[ js:)
  1. Hi,

    Ich möchte aus dieser Tablle eine Ausgabe Tabelle erzeugen, die mir pro Zeile angibt wie viele Einträge es pro Datum gibt

    Ich habe da bisher viel mit EXTRACT rumexperimentiert

    Umständlich - warum nicht direkt Funktionen wie DATE nutzen?

    SELECT COUNT( EXTRACT( DAY FROM datum ) ) ,

    EXTRACT( DAY FROM datum ) ,
    EXTRACT( MONTH FROM datum )
    FROM tabelle
    GROUP BY EXTRACT( MONTH FROM datum ),
    EXTRACT( DAY FROM datum )

      
    COUNT(\*) reicht zum zählen aus, und gruppieren brauchst du auch nur nach dem Gesamtdatum, wenn du DATE() benutzt.  
      
    MfG ChrisB  
      
    
    -- 
    “Whoever best describes the problem is the person most likely to solve the problem.” [Dan Roam]
    
    1. Moin, moin,

      Umständlich - warum nicht direkt Funktionen wie DATE nutzen?

      COUNT(*) reicht zum zählen aus, und gruppieren brauchst du auch nur nach dem Gesamtdatum, wenn du DATE() benutzt.

      MfG ChrisB

      ich bin baff und hätte nicht gedacht, dass das so einfach geht.
      Danke nochmal,
      aber ich hätte glich noch eine weitere Frage, wie kann ich die folgende Aufgabe lösen:
      Die Tabelle von eben hat nun eine zusätzliche Spalte, in der ein eindeutiger Bezeichner steht. Dieser bezeichner darf einmal pro 24 Std. in der Tabelle stehen. Ich kann das nicht so gut beschreiben, aber ich kann hier kurz aufzeigen, wie ich mir die Starttabelle und die Zieltabelle vorstelle, vielleicht findet da ja jemand eine gute Antwort drauf.
      Eine Beispieltabelle:

      +-------------------+------+
      |datum              |zusatz|
      +-------------------+------+
      |2010-02-22 09:17:55|1     |
      |2010-02-22 11:15:14|2     |
      |2010-02-23 17:17:05|1     |
      |2010-02-25 14:05:58|2     |
      |2010-02-25 13:15:16|1     |
      |2010-02-25 17:01:48|2     |
      |2010-02-26 14:22:20|1     |
      usw.

      Nun hätte ich gerne eine Zieltabelle wie diese:

      +------+------+
      |stunde|anzahl|
      +------+------+
      |01    |1     |
      |05    |1     |
      |15    |2     |
      |17    |1     |
      |22    |1     |

      Hier bin ich nach wie vor nicht am Verstehen, wie ich das Problem in den Griff bekommen kann, bisher habe ich dazu folgendes zusammengetüftelt:

      SELECT EXTRACT( HOUR FROM `datum` ) ,  
      COUNT( DISTINCT `zusatz` )  
      FROM `tabelle`  
      GROUP BY DATE( `datum` )
      

      mfG Felix Nehrke

      P.S.: Besuche unseren Blog:  http://www.pommes-blog.de

      --
      Manchmal gibs was neues :)
      fo:| ch:| rl:( br:> n4:? ie:( va:) de:> zu:) fl:( ss:| ls:[ js:)
      1. Hallo nochmal,

        ich hab nun eine Lösung gefunden, aber ich wüsste gerne von euch, ob es da nicht noch einen effizienteren Weg gibt:

        SELECT COUNT( `zusatz` ) ,  
        EXTRACT( HOUR FROM `datum` )  
        FROM `AntiCommercial_Script_log`  
        GROUP BY EXTRACT( HOUR FROM `datum` )
        

        mfG Felix Nehrke

        P.S.: Besuche unseren Blog:  http://www.pommes-blog.de

        --
        Manchmal gibs was neues :)
        fo:| ch:| rl:( br:> n4:? ie:( va:) de:> zu:) fl:( ss:| ls:[ js:)
      2. Hallo,

        Die Tabelle von eben hat nun eine zusätzliche Spalte, in der ein eindeutiger Bezeichner steht. Dieser bezeichner darf einmal pro 24 Std. in der Tabelle stehen.

        diese Beschreibung und die folgende Tabelle

        |datum              |zusatz|
        +-------------------+------+
        |2010-02-22 09:17:55|1     |
        |2010-02-22 11:15:14|2     |
        |2010-02-23 17:17:05|1     |
        |2010-02-25 14:05:58|2     |
        |2010-02-25 13:15:16|1     |
        |2010-02-25 17:01:48|2     |
        |2010-02-26 14:22:20|1     |

        passen nicht zusammen. Der Bezeichner 2 kommt innerhalb von 24 Stunden zweimal vor (sogar am gleichen Tag).

        Wie Du von diesen Beispieldaten auf

        Nun hätte ich gerne eine Zieltabelle wie diese:

        |stunde|anzahl|
        +------+------+
        |01    |1     |
        |05    |1     |
        |15    |2     |
        |17    |1     |
        |22    |1     |

        kommst, ist mir absolut schleierhaft. Die Stunden 01, 05, 15 und 22 kommen in Deiner Beispieltabelle überhaupt nicht vor. Begründe außerdem, warum Deine Abfrage das vorgestellte Ergebnis liefern soll.

        Ich kann das nicht so gut beschreiben, aber ich kann hier kurz aufzeigen, wie ich mir die Starttabelle und die Zieltabelle vorstelle, vielleicht findet da ja jemand eine gute Antwort drauf.

        Ein konsistentes Beispiel hilft.

        Freundliche Grüße

        Vinzenz