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:23ergibt
1.11.2005 2
2.11.2005 3Im 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 iststartdate[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, 2Haben 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.