Consulta SQL para obter o último dia de cada semana

8

Usando o MySQL, preciso consultar uma tabela que tenha um campo de data e hora. Preciso contar todos os registros para uma semana em particular. O uso de date_format (nome da coluna, "% Y% V") retorna a semana #, mas preciso do último dia (dia 01-28 | 29 | 30 | 31) para essa semana.

Saída Eg

    CONTAGEM (*) | A data
    11 07-01-2012
    22 2012-01-14
    123 21/01/2012

Socorro?

Nota: O último dia da semana no meu caso é domingo.

randomx
fonte

Respostas:

12

Você precisa usar a função DAYOFWEEK

Se o final da semana no sábado, qualquer data poderá ser transformada em um sábado.

Por exemplo, isso calcula o próximo sábado

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

Isso calcula o próximo domingo (você deve usar a função WEEKDAY )

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

Para uma tabela chamada mytable com uma Data Coluna chamada theDate, seu somatório seria

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;

De uma chance !!!

CAVEAT, se você quiser outro final de semana que não seja sábado e domingo, escrevi um algoritmo insano em 22 de setembro de 2011 para calcular qualquer semana que comece e termine em qualquer dia .

RolandoMySQLDBA
fonte
1

Use LAST_DAY().

A documentação está aqui .

Philᵀᴹ
fonte
2
Isso retorna o último dia do mês , não a semana.
Danny Beckett