これへの2つのステップ:
1つは、1週間の切り捨て操作が必要です。これにはDATETIME
が必要です。 アイテムを作成し、前の日曜日の深夜に返します(ビジネスルールで週が日曜日に始まると定められている場合)。
これが適切なGROUPBYアイテムになります。 WEEK()/ YEAR()ハックはこれには適していません。毎年の最後/最初の週に本当に混乱します。
私の経験では、この表現は、日曜日から土曜日まで、週の切り捨てのトリックを実行します。
FROM_DAYS(TO_DAYS(TIMESTAMP) -MOD(TO_DAYS(TIMESTAMP) -1, 7))
月曜日から日曜日の週を取得するには、この式を使用します。
FROM_DAYS(TO_DAYS(TIMESTAMP) -MOD(TO_DAYS(TIMESTAMP) -2, 7))
だからあなたはこれを行うことができます。
SELECT COUNT(whatever), SUM(whatelse),
FROM_DAYS(TO_DAYS(event_time) -MOD(TO_DAYS(event_time) -1, 7)) as WEEKSTART,
FROM TABLE
GROUP BY FROM_DAYS(TO_DAYS(event_time) -MOD(TO_DAYS(event_time) -1, 7))
次に、切り捨てられた日付に6日を追加して、各週の最終日と初日を表示できるようにする必要があります。
これは、ネストされたクエリを使用してこれを行うための良い方法です
SELECT whats, elses, weekstart, weekstart + INTERVAL 6 DAY AS weekend
FROM (
SELECT COUNT(whatever) AS whats, SUM(whatelse) AS elses,
FROM_DAYS(TO_DAYS(event_time) -MOD(TO_DAYS(event_time) -1, 7)) AS weekstart,
FROM TABLE
GROUP BY FROM_DAYS(TO_DAYS(event_time) -MOD(TO_DAYS(event_time) -1, 7))
) AS summary
ORDER BY weekstart
これをたくさんやっていますか?保存されたTRUNC_WEEK
を作成することをお勧めします 機能。