2012-11-27 12 views
13

In mySQL möchte ich eine Zählung der Datensätze mit einer start_date innerhalb des aktuellen Jahres (wie im Jahr 2012, NICHT innerhalb der letzten Jahreszeitraum) und (als eine separate Abfrage) eine Zählung der Datensätze aus dem Vorjahr (2011 in dem Fall, wie es jetzt ist).Zurückgeben aller mySQL-Datensätze für das aktuelle Jahr

Meine Startdaten sind so gespeichert: 2012-12-02. Ich benutze PHP.

Hilfe, wie ich diese Abfragen bilden würde sehr geschätzt werden.

Antwort

30
SELECT COUNT(*) 
FROM TABLE1 
WHERE YEAR(START_DATE) = YEAR(CURDATE()); 
+0

Danke, das hat mich auf den richtigen Weg gebracht. – user1857692

+2

Nicht sicher, dass es eine gute Entscheidung ist. Wenn Sie den Index am START_DATE haben, wird es nicht funktionieren. Besser, alle Vorbereitungen im richtigen Teil der Bedingung zu machen. So etwas wie START_DATE> DATE_FORMAT (NOW(), '% Y-01-01 00:00:01') –

8

Sie können YEAR Funktion verwenden, um das Jahr von dem Datum zu erhalten und dasselbe im Vergleich zu verwenden.

SELECT COUNT(*) 
FROM TABLE1 
WHERE YEAR(START_DATE) = 2012; 

separate Abfrage aus dem Vorjahr:

SELECT COUNT(*) 
FROM TABLE1 
WHERE YEAR(START_DATE) = 2011; 

die Jahre weise zählt zu erhalten:

SELECT COUNT(b.YEAR), b.YEAR 
FROM TABLE1 AS a JOIN 
    (SELECT DISTINCT YEAR(START_DATE) AS YEAR from TABLE1) AS b 
    ON YEAR(START_DATE) = b.YEAR 
GROUP BY b.YEAR; 
+0

Aber das würde erfordern, ich Jahr manuell die codierte Fest ändern jedes Jahr. Ich möchte, dass dieses Bit automatisch ist. – user1857692

+2

'WHERE JAHR (START_DATE) = YEAR (NOW())' – kmfk

+0

Sie können das 2012 oder 2011 in der Abfrage als eine Variable innerhalb von PHP festlegen, also wird es automatisch/dynamisch sein. – David

0

Zwei Vorschläge:

Sie Ihre Daten Daten unter Verwendung filtern:

select count(*) from tbl where start_date >= '2012-01-01' 

oder

select count(*) from tbl where start_date between '2012-01-01' and '2012-12-31' 

Auch Sie Ihre Daten mit der year() Funktion filtern:

select count(*) from tbl where year(start_date) = 2012 

Hoffnung, dies hilft Ihnen


Wenn Sie PHP verwenden (oder eine andere High-Level-Programmiersprache), können Sie Ihre Abfragezeichenfolge zur Laufzeit an Ihre Bedürfnisse anpassen (z. B. Datensätze aus verschiedenen Jahren filtern).

Um die Anzahl der Datensätze mit start_date vor 2012 zu zeigen, nur die where Bedingungen ändern:

select... where year(start_date) < 2012 

oder

select... where start_date < '2012-01-01' 
Verwandte Themen