Nach Datum gruppieren



  • Moin,

    ich möchte gern sein select Befehl der mir alle Einträge in einer Tabelle nach Datum zusammen zählt.

    Zum Beispiel möchte ich gern alle Einträge für November nach Tagen gezählt.

    1.11.2005 10:20:00
    1.11.2005 11:20:23
    2.11.2005 10:20:00
    2.11.2005 11:20:23
    2.11.2005 17:20:23

    ergibt

    1.11.2005 2
    2.11.2005 3

    Im Grunde genommen macht mir die Zeit probleme ich weiß nicht wie ich die weg bekomme



  • Pseudo-SQL, ohne zu wissen, wie Deine Tabelle aussieht:

    SELECT Datum, COUNT(*)
    FROM meineTabelle
    GROUP BY Datum;
    


  • Wenn die Zeit mit ausgegeben wird musst du explizit sagen, dass du nur das Datum haben willst. Dafür bietet dein DBMS Funktionen an - du müsstest uns verraten welches du benützt 😉

    MfG SideWinder



  • Ich arbeite mit der DB MSSQL
    Die Tabelle ist eine Fehlerliste und der Aufbau ist

    startdate[datetime],stopdate[datetime],errorcode[int],device_id[int]

    Logik ist immer wenn ein Fehler auftritt wird dies in der DB protokoliert mit dem Datum, Error Code und Gerätekennung. Wenn der Fehler behoben wird stopdate gesetzt.

    Nun möchte ich gerne wissen wieviel Fehler an den jeweiligen Tagen für einen bestimmten Zeitraum aufgetreten sind. Dabei spielt die Art des Fehlers keine Rolle.

    Wenn ich nach startdate gruppiere, dann spielen leider auch Sekunden eine Rolle.

    Angefangen habe ich so

    SELECT * FROM errorlist 
    WHERE device_id=2
    AND (stopdate IS NULL OR stopdate>'01.11.2005')
    AND startdate<'20.11.2005'
    

    Dabei kommen alle noch offene und abgeschlossenen Fehler heraus.

    start,stop,fehler,gerät
    1.11.2005 13:45:02,1.11.2005 14:45:00, 103, 2
    1.11.2005 12:23:28,1.11.2005 14:45:00, 102, 2
    3.11.2005 13:45:00,3.11.2005 14:45:00, 103, 2
    7.11.2005 13:45:00,NULL, 103, 2

    Haben möchte ich gern

    Start,count
    1.11.2005,2
    3.11.2005,1
    7.11.2005,1



  • nachtrag:

    das funktioniert hervorragend

    SELECT errorcode,count(errorcode) FROM errorlist 
    WHERE device_id=2
    AND (stopdate IS NULL OR stopdate>'01.11.2005')
    AND startdate<'20.11.2005' 
    GROUP BY errorcode
    


  • Schau dochmal in der Dokumentation deines DB-Systems, ob dort Funktionen wie "Day()", "Month()" oder "Year()" verfügbar sind, die aus einem DateTime-Wert die einzelnen Bestandteile aussortieren. Wenn ja, kannst du nach "Day(startdate)" etc gruppieren.



  • ja, danke ich hab's glaube ich schon.

    SELECT year(startdate),month(startdate),day(startdate),count(*) FROM errorlist 
    WHERE device_id=2 
    AND (stopdate IS NULL OR stopdate>'01.11.2005')
    AND startdate<'20.11.2005'
    group by year(startdate),month(startdate),day(startdate)
    

    ist nicht ganz so wie ich es erwartet habe, aber gut



  • Warum nicht mit der Funktion:

    DATE(expr)

    Extracts the date part of the date or datetime expression expr.

    mysql> SELECT DATE('2003-12-31 01:02:03');
    -> '2003-12-31'

    DATE() is available as of MySQL 4.1.1.

    http://dev.mysql.com/doc/refman/4.1/en/date-and-time-functions.html



  • -=]xXx[=- schrieb:

    Warum nicht mit der Funktion

    Er verwendet MS SQL, darum soll er lieber selbst nachschaun, wie das da heißt. 😉


Anmelden zum Antworten