SQL-Abfrage zum Abrufen des letzten Tages jeder Woche

8

Mit MySQL muss ich eine Tabelle mit einem Datum / Uhrzeit-Feld abfragen. Ich muss alle Datensätze für eine bestimmte Woche zählen. Wenn Sie date_format (Spaltenname, "% Y% V") verwenden, wird die Woche # zurückgegeben, aber ich benötige den letzten Tag (Tag des Monats 01-28 | 29 | 30 | 31) für diese Woche.

Ausgabe zB

    COUNT (*) | Das Datum
    11 | 2012-01-07
    22 | 2012-01-14
    123 | 2012-01-21

Hilfe?

Hinweis: Der letzte Wochentag ist in meinem Fall der Sonntag.

randomx
quelle

Antworten:

12

Sie müssen die DAYOFWEEK- Funktion verwenden

Wenn das Ende der Woche am Samstag ist, kann jedes Datum in einen Samstag umgewandelt werden.

Dies berechnet beispielsweise den kommenden Samstag

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

Dies berechnet den kommenden Sonntag (Sie müssen stattdessen die WEEKDAY- Funktion verwenden)

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

Für eine Tabelle namens mytable mit einer Datumsspalte namens theDate wäre Ihre Summation

Samstag

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

Sonntag

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

Versuche es !!!

CAVEAT Wenn Sie ein anderes Ende der Woche als Samstag und Sonntag wünschen, habe ich bereits am 22. September 2011 einen verrückten Algorithmus geschrieben, mit dem jede Woche berechnet werden kann, die an einem beliebigen Tag beginnt und endet .

RolandoMySQLDBA
quelle
1

Verwenden Sie LAST_DAY().

Die Dokumentation ist hier .

Philᵀᴹ
quelle
2
Dies gibt den letzten Tag des Monats zurück , nicht die Woche.
Danny Beckett