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.

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 .


Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.