Pertama-tama, Anda memiliki kesalahan kecil di WHERE
ayat. Anda membutuhkan:
where access_time >= '2013-05-28 02:00:00'
and access_time < '2013-05-28 10:00:00'
karena rentang seperempat jam Anda berjalan dari waktu tertentu hingga saat sebelum waktu tertentu lainnya. Anda membutuhkan <
, bukan <=
, untuk akhir rentang waktu Anda.
Kemudian, Anda memerlukan ekspresi yang dapat mengambil DATETIME
arbitrer ekspresi dan mengubahnya menjadi DATETIME
dari awal seperempat jam di mana itu terjadi.
Ini akan melakukannya.
DATE_FORMAT(datestamp,'%Y-%m-%d %H:00:00') +
INTERVAL (MINUTE(datestamp) -
MINUTE(datestamp) MOD 15) MINUTE
Ternyata, misalnya '2014-05-07 14:53:22'
, ke '2014-05-07 14:45:00'
.
Anda dapat mendefinisikannya sebagai fungsi tersimpan seperti ini jika Anda suka:
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 ;
Anda kemudian dapat menulis kueri Anda seperti ini:
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
Ini tertulis di sini. http://www.plumislandmedia.net/mysql/sql-reporting- interval waktu/