2012-11-27 17 views
13

In mySQL, vorrei restituire un conteggio dei record che hanno un start_date nell'anno corrente (come nell'anno 2012, NON entro l'ultimo periodo di un anno) e (come una query separata) un conteggio dei record dell'anno precedente (2011 nel caso in cui è ora).Restituisce tutti i record mySQL per l'anno corrente

Le mie date di inizio vengono memorizzate così: 2012-12-02. Sto usando PHP.

L'aiuto su come formerei queste domande sarebbe molto apprezzato.

risposta

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

Grazie, questo mi ha fatto sulla buona strada. – user1857692

+2

Non sono sicuro che sia una buona decisione. Se hai l'indice il giorno START_DATE, non funzionerà. Meglio fare tutti i preparativi nella parte giusta della condizione. Qualcosa di simile a questo START_DATE> DATE_FORMAT (NOW(), '% Y-01-01 00:00:01') –

8

Si consiglia di utilizzare la funzione YEAR per ottenere l'ANNO dalla data e utilizzare lo stesso in confronto.

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

query separata dal precedente:

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

Per ottenere l'anno saggi conta:

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

Ma ciò obbligherebbe a cambiare manualmente l'anno hard-coded ogni anno. Mi piacerebbe che quel pezzo fosse automatico. – user1857692

+2

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

+0

È possibile impostare 2012 o 2011 nella query come variabile all'interno di PHP, quindi sarà automatico/dinamico. – David

0

due suggerimenti:

È possibile filtrare i dati utilizzando date:

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

o

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

Inoltre, è possibile filtrare i dati utilizzando la funzione year():

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

Spero che questo ti aiuta


Se si sta utilizzando PHP (o qualsiasi altro linguaggio di programmazione di alto livello), è possibile creare la stringa di query su runtime in base alle proprie esigenze (ad es Per filtrare i record di anni diversi).

Per mostrare il conteggio dei record con start_date prima del 2012, basta cambiare le where condizioni:

select... where year(start_date) < 2012 

o

select... where start_date < '2012-01-01' 
Problemi correlati