まず、WHERE
に微妙なエラーがあります 句。必要なもの:
where access_time >= '2013-05-28 02:00:00'
and access_time < '2013-05-28 10:00:00'
15分の範囲は、特定の時間から前の瞬間まで実行されるためです。 別の特定の時間。 <
が必要です 、<=
ではありません 、あなたの時間範囲の終わりのために。
次に、任意のDATETIME
を取ることができる式が必要です。 式を作成し、DATETIME
に変換します それが発生する15分の始まりの。
これでそれができます。
DATE_FORMAT(datestamp,'%Y-%m-%d %H:00:00') +
INTERVAL (MINUTE(datestamp) -
MINUTE(datestamp) MOD 15) MINUTE
たとえば、'2014-05-07 14:53:22'
、into '2014-05-07 14:45:00'
。
必要に応じて、次のようなストアド関数として定義できます。
DELIMITER $$
DROP FUNCTION IF EXISTS `TRUNC_15_MINUTES`$$
CREATE FUNCTION `TRUNC_15_MINUTES`(datestamp DATETIME)
RETURNS DATETIME
NO SQL
DETERMINISTIC
RETURN DATE_FORMAT(datestamp,'%Y-%m-%d %H:00:00') +
INTERVAL (MINUTE(datestamp) -
MINUTE(datestamp) MOD 15) MINUTE$$
DELIMITER ;
次に、次のようにクエリを記述できます。
select TRUNC_15_MINUTES(access_time) AS period_starting,
user, count(user) as users
from user_access
where access_time >= '2013-05-28 02:00:00'
and access_time < '2013-05-28 10:00:00'
group by TRUNC_15_MINUTES(access_time), user
order by TRUNC_15_MINUTES(access_time), user
これはここに書かれています。 http://www.plumislandmedia.net/mysql/sql-reporting-時間間隔/