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.

randomx
la source

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 .

RolandoMySQLDBA
la source
1

Utilisez LAST_DAY().

La documentation est ici .

Philᵀᴹ
la source
2
Cela renvoie le dernier jour du mois , pas la semaine.
Danny Beckett