2012-11-27 21 views
13

W mySQL, chciałbym zwrócić liczbę rekordów, które mają start_date w bieżącym roku (jak w roku 2012, NIE w ciągu ostatniego roku) i (jak oddzielna kwerenda) liczba rekordów z poprzedniego roku (2011 w przypadku, jak jest teraz).Zwróć wszystkie rekordy mySQL dla bieżącego roku

Moje daty początkowe są przechowywane w następujący sposób: 2012-12-02. Używam PHP.

Pomoc na temat tego, jak utworzyć te zapytania, byłaby ogromnie doceniana.

Odpowiedz

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

Dzięki, że dostałem mnie na właściwym tropie. – user1857692

+2

Nie jestem pewien, czy to dobra decyzja. Jeśli masz indeks na START_DATE, nie będzie działać. Lepiej przygotować wszystkie preparaty we właściwej części warunku. Coś takiego: START_DATE> DATE_FORMAT (TERAZ(), "% Y-01-01 00:00:01") –

8

Możesz użyć funkcji YEAR, aby uzyskać ROK od daty i użyć tego samego w porównaniu.

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

Odrębne zapytania z poprzedniego roku:

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

Aby roku liczy mądrości:

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

Ale które wymagałyby ręcznie zmienić zakodowane roku każdego roku. Chciałbym, żeby to było automatyczne. – user1857692

+2

'GDZIE ROK (START_DATA) = ROK (TERAZ())' – kmfk

+0

Możesz ustawić, aby rok 2012 lub 2011 w zapytaniu był zmienną wewnątrz PHP, więc będzie to automatyczne/dynamiczne. – David

0

dwie sugestie:

Można filtrować dane używając terminów:

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

lub

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

Ponadto, można filtrować dane używając year() funkcję:

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

Nadzieja to pomaga


Jeśli używasz PHP (lub dowolny inny język programowania wysokiego poziomu), możesz zbudować ciąg zapytania w czasie wykonywania, aby dopasować go do swoich potrzeb (np Aby filtrować rekordy z różnych lat).

Aby wyświetlić liczbę zapisów z start_date przed 2012, wystarczy zmienić where warunki:

select... where year(start_date) < 2012 

lub

select... where start_date < '2012-01-01' 
Powiązane problemy