2012-11-27 7 views
13

Dans mySQL, je voudrais retourner le nombre d'enregistrements qui ont un start_date dans l'année en cours (comme en 2012, PAS dans la dernière période de l'année) et (comme une requête séparée) un compte des enregistrements de l'année précédente (2011 dans le cas où c'est maintenant).Retourne tous les enregistrements mySQL pour l'année en cours

Mes dates de début sont stockées ainsi: 2012-12-02. J'utilise PHP.

L'aide sur la façon dont je formerais ces requêtes serait grandement appréciée.

Répondre

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

Merci, ça m'a mis sur la bonne voie. – user1857692

+2

Je ne suis pas sûr que ce soit une bonne décision. Si vous avez l'index le START_DATE, cela ne fonctionnera pas. Mieux vaut faire toutes les préparations dans la bonne partie de l'état. Quelque chose comme ce START_DATE> DATE_FORMAT (MAINTENANT(), '% Y-01-01 00:00:01') –

8

Vous pouvez utiliser la fonction YEAR pour obtenir l'ANNÉE à partir de la date et l'utiliser en comparaison.

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

requête séparée de l'année précédente:

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

Pour obtenir l'année compte sages:

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

Mais cela exigerait que je change manuellement l'année codée en dur chaque année. J'aimerais que ce soit automatique. – user1857692

+2

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

+0

Vous pouvez définir le 2012 ou 2011 dans la requête pour qu'il soit une variable à l'intérieur de PHP, donc il sera automatique/dynamique. – David

0

Deux suggestions:

Vous pouvez filtrer vos données en utilisant les dates:

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

ou

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

En outre, vous pouvez filtrer vos données en utilisant la fonction year():

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

Hope this vous aide


Si vous utilisez PHP (ou tout autre langage de programmation de haut niveau), vous pouvez construire votre chaîne de requête sur runtime pour répondre à vos besoins (par exemple Filtrer les enregistrements de différentes années).

Pour afficher le nombre d'enregistrements avec start_date avant 2012, il suffit de changer les conditions where:

select... where year(start_date) < 2012 

ou

select... where start_date < '2012-01-01' 
Questions connexes