Consulta SQL para obtener el último día de cada semana

8

Usando MySQL, necesito consultar una tabla que tiene un campo de fecha y hora. Necesito contar todos los registros de una semana en particular. El uso de date_format (colname, "% Y% V") devuelve la semana #, pero necesito el último día (día del mes 01-28 | 29 | 30 | 31) para esa semana.

Salida eg

    COUNT (*) | La fecha
    11 | 2012-01-07
    22 | 14/01/2012
    123 | 2012-01-21

¿Ayuda?

Nota: El último día de la semana en mi caso es el domingo.

randomx
fuente

Respuestas:

12

Necesita usar la función DAYOFWEEK

Si el final de la semana es el sábado, cualquier fecha se puede transformar en sábado.

Por ejemplo, esto calcula el próximo sábado

SELECT DATE(NOW() + INTERVAL (7 - DAYOFWEEK(NOW())) DAY);

Esto calcula el próximo domingo (en su lugar, debe usar la función WEEKDAY )

SELECT DATE(NOW() + INTERVAL (6 - WEEKDAY(NOW())) DAY); 

Para una tabla llamada mytable con una columna de fecha llamada theDate, su suma sería

sábado

SELECT COUNT(1) DateCount,EndOfWeekDate FROM
(
    SELECT DATE(theDate + INTERVAL (7 - DAYOFWEEK(theDate)) DAY) EndOfWeekDate
    FROM mytable
) A GROUP BY EndOfWeekDate;

domingo

SELECT COUNT(1) DateCount,EndOfWeekDate FROM
(
    SELECT DATE(theDate + INTERVAL (6 - WEEKDAY(theDate)) DAY) EndOfWeekDate
    FROM mytable
) A GROUP BY EndOfWeekDate;

Darle una oportunidad !!!

CAVEAT si desea cualquier otro fin de semana que no sea sábado y domingo, escribí un algoritmo loco el 22 de septiembre de 2011 para calcular cualquier semana que comience y termine cualquier día .

RolandoMySQLDBA
fuente
1

Uso LAST_DAY().

La documentación está aquí .

Philᵀᴹ
fuente
2
Esto devuelve el último día del mes , no la semana.
Danny Beckett