809 Stimmen

MySQL-Abfrage GROUP BY Tag / Monat / Jahr

Ist es möglich, eine einfache Abfrage zu erstellen, um zu zählen, wie viele Datensätze ich in einem bestimmten Zeitraum wie einem Jahr, einem Monat oder einem Tag habe, wobei eine TIMESTAMP Feld, wie:

SELECT COUNT(id)
FROM stats
WHERE record_date.YEAR = 2009
GROUP BY record_date.YEAR

Oder sogar:

SELECT COUNT(id)
FROM stats
GROUP BY record_date.YEAR, record_date.MONTH

Um eine monatliche Statistik zu haben.

Gracias.

6voto

Minisha Punkte 1917

Die folgende Abfrage funktionierte bei mir in Oracle Database 12c Release 12.1.0.1.0

SELECT COUNT(*)
FROM stats
GROUP BY 
extract(MONTH FROM TIMESTAMP),
extract(MONTH FROM TIMESTAMP),
extract(YEAR  FROM TIMESTAMP);

3voto

Arth Punkte 12000

Ich ziehe es vor, die einjährige Gruppenauswahl so zu optimieren:

SELECT COUNT(*)
  FROM stats
 WHERE record_date >= :year 
   AND record_date <  :year + INTERVAL 1 YEAR;

Auf diese Weise können Sie das Jahr nur einmal einbinden, z. B. '2009' mit einem benannten Parameter und müssen sich nicht um das Hinzufügen von '-01-01' oder das Einreichen '2010' getrennt.

Da wir vermutlich nur die Zeilen zählen und id ist nie NULL Ich bevorzuge COUNT(*) a COUNT(id) .

1voto

NiKiZe Punkte 1053

Ich wollte ähnliche Daten pro Tag erhalten, und nach einigem Experimentieren ist dies das schnellste, was ich für mein Szenario finden konnte

SELECT COUNT(id)
FROM stats
GROUP BY record_date DIV 1000000;

Wenn Sie es pro Monat haben wollen, fügen Sie zusätzliche Nullen (00) hinzu. Ich würde dies aus der Perspektive "den Code lesbar machen" nicht empfehlen, es könnte auch in verschiedenen Versionen kaputt gehen. Aber in unserem Fall hat dies weniger als die Hälfte der Zeit in Anspruch genommen, verglichen mit einigen anderen, klareren Abfragen, die ich getestet habe.

Dies ist eine MySQL-Antwort (da MySQL in der Frage getaggt ist) und im Handbuch gut dokumentiert https://dev.mysql.com/doc/refman/8.0/en/date-and-time-type-conversion.html

0voto

aromita sen Punkte 37

.... group by to_char(date, 'YYYY') --> 1989

.... group by to_char(date,'MM') -->05

.... group by to_char(date,'DD') --->23

.... group by to_char(date,'MON') --->MAI

.... group by to_char(date,'YY') --->89

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X