nasıl grup MySql satırlara aya göre?

3 Cevap php

'Yaratılmış' alanı ve her bir satırda 'tutar' (tamsayı) alan bir datetime (: 'Ymd H: i s' biçimi) ile bir tablo var. Şimdi ben geçen yıl ay bilge toplam 'miktarda' öğrenmek istiyorum. Bunu nasıl yapabilirim?

EDIT

Ben gerçek sorunu açıklığa kavuşturmak için bir düzenleme yaptı. nedenle temelde ben her ay toplam 'miktarı' bilmek istiyorum, ama sadece geçen yıl için.

EDIT2

Geçen yıl son 365 gün demektir. Yani bir yerde ben 'geçerli günü' düşünmeye ettik?

EDIT3

Benim hatam, aslında geçen yıl son 12 aydır. Böylece gün sayısı 336 ile 365 arasında olacaktır.

3 Cevap

Bu deneyin (sizin "Edit3" cevap updated):

SELECT
    YEAR(created) as year,
    MONTH(created) AS month,
    SUM(amount) AS total_amount
FROM table1
WHERE created
    BETWEEN DATE(NOW()) - INTERVAL (DAY(NOW()) - 1) DAY - INTERVAL 11 MONTH
    AND NOW()
GROUP BY YEAR(created), MONTH(created)
ORDER BY YEAR(created), MONTH(created);

Örnek sonuç (Nisan 2010'da çalıştırdığınızda):

year  month  total_amount
2009  5      26
2010  1      20

Hiçbir girişleri ile ay (yerine TOTAL_AMOUNT = 0 ile döndü olmaktan) Tüm iade olmayacağını da unutmayın.

Test verileri:

CREATE TABLE table1 (created datetime NOT NULL, amount INT NOT NULL);
INSERT INTO table1 (created, amount) VALUES
('2010-01-01 13:56:23', 5),
('2010-01-04 13:56:23', 15),
('2009-05-04 13:56:23', 26);

Bu geçen yıl sayısı ve toplam tutarı döndürür:

SELECT MONTH(created) as month_updated,
  COUNT(created) as month_updates, SUM(amount) as month_total FROM table
WHERE created BETWEEN DATE_ADD(NOW(), INTERVAL -1 YEAR) AND NOW()
GROUP BY MONTH(created)

Veya, özellikle sadece 2009 demek eğer:

SELECT MONTH(created) as month_updated,
  COUNT(created) as month_updates, SUM(amount) as month_total FROM table
WHERE created BETWEEN '2009-01-01 00:00:00' AND '2009-12-31 23:59:59'
GROUP BY MONTH(created)
SELECT count(some_row) AS or_whatever FROM your_table GROUP BY MONTH(update);

(Senin güncelleme ile) Daha spesifik olmak gerekirse:

SELECT SUM(amount) FROM table_name GROUP BY MONTH(created);