2017-05-26 5 views
1

私は過去6週間に週ごとに平均してplayer_countを取得しようとしています。しかし問題は、特定の平均に対応する曜日の日付の開始と終了も欲しいということです。MySQL - 週の始まりと終わりを列の平均(週別)で選択します。

私が試してみました何

SELECT AVG(player_count) as average, 
    updated_at, 
    updated_at + INTERVAL WEEKDAY(updated_at) + 7 DAY as EndDate 
FROM `gtan_servers` 
WHERE server_short_name = 'FiveRP' 
GROUP BY WEEK(updated_at) 
ORDER BY updated_at DESC 
LIMIT 6 

updated_at列が週の始まりと解釈されることを意図しているとEndDateは、週の終わりと解釈されようとしているものでプレイヤー数の特定の平均供給される。

ただし、このクエリは週の日付に関して正しく機能していません。私は平均はいをフェッチすることができますが、週の日付は正しくフェッチされていません。どんな助けも高く評価されます。

答えて

1

は、の任意の日付を、それが発生した曜日の最初の曜日に切り捨てる式が必要です。つまり、返信すると2017-05-21(日曜日)が返されます。2017-05-24

この表現は、あなたの週が日曜日に始まると仮定します。 Here's an explanation.

FROM_DAYS(TO_DAYS(datestamp) -MOD(TO_DAYS(datestamp) -1, 7)) 

その後、あなたはGROUP BY表現し、表現としてそれを使用する必要があります。

SELECT AVG(player_count) as average, 
    FROM_DAYS(TO_DAYS(updated_at) -MOD(TO_DAYS(updated_at) -1, 7)) week_beginning, 
    FROM_DAYS(TO_DAYS(updated_at) -MOD(TO_DAYS(updated_at) -1, 7)) + INTERVAL 6 DAY week_ending 
FROM `gtan_servers` 
WHERE server_short_name = 'FiveRP' 
    AND updated_at >= FROM_DAYS(TO_DAYS(NOW()) -MOD(TO_DAYS(NOW()) -1, 7)) - INTERVAL 6 WEEK 
GROUP BY FROM_DAYS(TO_DAYS(updated_at) -MOD(TO_DAYS(updated_at) -1, 7)) 
ORDER BY 2 DESC 
LIMIT 6 

WHEREは、レポートから古いレコードを自動的にフィルタリングして除外します。

このクエリは少し繰り返しますが、うまく機能します。次に、あなたのクエリが読みやすくなり

DELIMITER $$ 
DROP FUNCTION IF EXISTS TRUNC_SUNDAY$$ 
CREATE 
    FUNCTION TRUNC_SUNDAY(datestamp DATETIME) 
    RETURNS DATE DETERMINISTIC NO SQL 
    COMMENT 'returns preceding Sunday' 
    RETURN FROM_DAYS(TO_DAYS(datestamp) -MOD(TO_DAYS(datestamp) -1, 7))$$ 
DELIMITER ; 

:あなたはこのようなストアド・ファンクションを作成することができ

SELECT AVG(player_count) as average, 
    TRUNC_SUNDAY(updated_at) week_beginning, 
    TRUNC_SUNDAY(updated_at) + INTERVAL 6 DAY week_ending 
FROM `gtan_servers` 
WHERE server_short_name = 'FiveRP' 
    AND updated_at >= TRUNC_SUNDAY(NOW()) - INTERVAL 6 WEEK 
GROUP BY TRUNC_SUNDAY(updated_at) 
ORDER BY TRUNC_SUNDAY(updated_at) DESC 
LIMIT 6 

あなたの週は月曜日に開始する場合は、-2-1を変更します。

+0

ありがとうございます。これはまさに私が必要としていたものです。コミュニティーの人を助け続ける。 –

関連する問題