Requête SQL pour obtenir le dernier jour de chaque semaine


8

En utilisant MySQL, j'ai besoin d'interroger une table qui a un champ datetime. Je dois compter tous les enregistrements d'une semaine particulière. L'utilisation de date_format (colname, "% Y% V") renvoie la semaine #, mais j'ai besoin du dernier jour (jour du mois 01-28 | 29 | 30 | 31) pour cette semaine.

Sortie par exemple

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

Aidez-moi?

Remarque: le dernier jour de la semaine dans mon cas est le dimanche.

Réponses:


12

Vous devez utiliser la fonction DAYOFWEEK

Si la fin de la semaine du samedi, n'importe quelle date peut être transformée en samedi.

Par exemple, cela calcule le samedi à venir

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

Ceci calcule le dimanche à venir (vous devez utiliser la fonction WEEKDAY à la place)

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

Pour une table appelée mytable avec une colonne de date appelée theDate, votre somme serait

samedi

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

dimanche

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

Essaie !!!

CAVEAT si vous voulez une fin de semaine autre que le samedi et le dimanche, j'ai écrit un algorithme fou le 22 septembre 2011 pour calculer n'importe quelle semaine commençant et se terminant n'importe quel jour .


En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.