2009-10-13 21 views
8

Ben aslında bir datetime alanıyla işlem bilgi bir demet bir tablo şema varSadece datetime alanı olduğunda ay ve yıl bazında nasıl gruplanırım?

TRANSACTION (<transactionid>, amount, when) 
ben SUM (miktar) olan işlemlerin aylık toplam oluşturmak gerekir

ama ben ne kelimler grup tarafından SQL'den her satır, aylık toplamı içermelidir (bu nedenle, Ocak 09, Şubat 09 için bir satır .... Jan 2010 vb.). Tabloyu kodla üretmek zorunda olabileceğimi düşünüyorum, ancak bunu SQL kullanarak çözmenin bir yolu olup olmadığını öğrenmek istiyorum.

Herhangi bir yardım için teşekkür ederiz! ... AY Hep kullandım

+1

Sadece yeni başlayanlar için haber verin, ne zaman? tablo sütun adı bir MySQL işlevi değil. – GusDeCooL

cevap

18

Ekstreler ile gruplandırmanız gerekir.

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

Ve sonra Tabii

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

bu sütunları, gerekirse ORDER BY ekler ve çok kısa adları kullanabilirsiniz:

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

(PHP5'ta, MySQL 5.3 kullanarak)() ve YILI (...) Bana bir Hack gibi biraz görünüyor ama işe yarıyor

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

Yoksa başka bir yol muydu?

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) 

Bu MS SQL üzerinde çalışır ve çok MySQL çalışması gerekir:

Bobby

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

Güzel, ama her veritabanında çalışmayacak :(. –

+4

soru MySQL hakkında! – manji

2

Ben böyle bir şey denemek olacağını düşünüyor.

1

İstediğin düşünüyorum:

SELECT SUM(amount) 
FROM yourTable 
GROUP BY CONCAT(YEAR(date), '-', MONTH(date)) 
İlgili konular