php example ¿Cómo agrupar las filas de MySql en función del mes?




group by mysql ejemplo (3)

SELECT count(some_row) AS or_whatever FROM your_table GROUP BY MONTH(update);

Para ser más específico (con su actualización):

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

Tengo una tabla con un campo de fecha y hora (formato: 'Ymd H: i: s') 'creado' y 'cantidad' (entero) en cada fila. Ahora quiero saber la 'cantidad' total mes sabia en el año pasado. ¿Cómo puedo hacer esto?

EDITAR

Hice una edición para aclarar el problema real. así que, básicamente, quiero saber la "cantidad" total en cada mes, pero solo durante el último año.

EDIT2

El año pasado significa los últimos 365 días. Entonces, ¿en algún lugar debo considerar el "día actual"?

EDIT3

Mi mal, en realidad el año pasado son los últimos 12 meses. Por lo tanto, el número de días sería entre 336 y 365.


Answer #1

Pruebe esto (actualizado para responder su "edit3"):

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);

Ejemplo de resultado (cuando se ejecuta en abril de 2010):

year  month  total_amount
2009  5      26
2010  1      20

Tenga en cuenta también que los meses sin entradas no se devolverán (en lugar de devolverse con total_amount = 0).

Datos de prueba:

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);

Answer #2

Esto devuelve el conteo y el monto total del año pasado:

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)

O, si específicamente quieres decir solo 2009:

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)






group-by