2009-10-13 15 views
8

Ho uno schema di tabella che è essenzialmente un mucchio di informazioni transazione con un campo datetimeCome faccio a raggruppare per mese e anno quando ho solo un campo datetime?

TRANSACTION (<transactionid>, amount, when) 

ho bisogno di generare un totale mensile di transazioni, che è SUM (importo), ma sono perplesso da ciò che faccio raggruppa per. Ogni riga di SQL deve contenere il totale mensile (quindi una riga per Gen 09, Feb 09 .... gen 2010 e così via). Sto pensando che potrei dover generare la tabella in base al codice, ma vorrei sapere se c'è un modo per risolvere ciò usando SQL.

Qualsiasi aiuto sarebbe apprezzato! (Utilizzando MySQL 5.3, PHP5)

+1

solo avviso per principiante, 'when' is il nome della colonna della tabella non è una funzione MySQL. – GusDeCooL

risposta

18

È necessario raggruppare per estratti.

SELECT 
    SUM(amount) 
FROM 
    transaction 
GROUP BY 
    EXTRACT(MONTH FROM when), 
    EXTRACT(YEAR FROM when) 

E se avete bisogno di tali colonne, poi

SELECT 
    EXTRACT(MONTH FROM when) as month, 
    EXTRACT(YEAR FROM when) as year, 
    SUM(amount) 
FROM 
    transaction 
GROUP BY 
    month, 
    year 

Naturalmente è possibile accodare ORDER BY e utilizzare nomi brevi troppo:

SELECT 
    EXTRACT(MONTH FROM when) as month, 
    EXTRACT(YEAR FROM when) as year, 
    SUM(amount) 
FROM 
    transaction 
GROUP BY 
    month, 
    year 
ORDER BY 
    year DESC, 
    month DESC 
3

ho sempre usato MONTH() e YEAR() ... che sembra un po 'come un trucco per me, ma funziona ...

SELECT SUM(amount) FROM yourTable GROUP BY MONTH(date), YEAR(date) 

O era il contrario? pensa

Bobby

5
SELECT EXTRACT(YEAR_MONTH FROM when), sum(amount) 
     FROM TRANSACTION 
    GROUP BY EXTRACT(YEAR_MONTH FROM when) 
+0

Bello, ma non funzionerà su tutti i database :(. –

+4

la domanda riguarda MySQL! – manji

2

vorrei provare qualcosa di simile:

SELECT 
    YEAR(when) AS year, 
    MONTH(when) AS month, 
    SUM(amount) AS amount 
FROM 
    TRANSACTION 
GROUP BY 
    YEAR(when), 
    MONTH(when) 
ORDER BY 
    YEAR(when), 
    MONTH(when) 

Questo funziona su MS SQL e dovrebbe funzionare su MySQL troppo.

1

Penso che si desidera:

SELECT SUM(amount) 
FROM yourTable 
GROUP BY CONCAT(YEAR(date), '-', MONTH(date)) 
Problemi correlati