毎週の最終日を取得するSQLクエリ


8

MySQLを使用して、日時フィールドを持つテーブルをクエリする必要があります。特定の週のすべてのレコードをカウントする必要があります。date_format(colname、 "%Y%V")を使用すると、週番号が返されますが、その週の最終日(月の日01-28 | 29 | 30 | 31)が必要です。

出力例

    COUNT(*)| 日付
    11 | 2012-01-07
    22 | 2012-01-14
    123 | 2012-01-21

助けて?

注:私の場合、週の最終日は日曜日です。

回答:


12

DAYOFWEEK関数を使用する必要があります

週末が土曜日の場合、任意の日付を土曜日にモーフできます。

たとえば、これは次の土曜日を計算します

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

次の日曜日を計算します(代わりにWEEKDAY関数を使用する必要があります)

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

theDateという日付列を持つmytableというテーブルの場合、合計は次のようになります。

土曜日

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

日曜日

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

試してみる !!!

土曜日と日曜日以外の週末が必要な場合は、CAVEATを使用して、2011年9月22日に、週の開始日と終了日を計算する非常識なアルゴリズムを作成しました


弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.