सबसे पहले, आपको अपने WHERE
. में एक सूक्ष्म त्रुटि है खंड। आपको चाहिए:
where access_time >= '2013-05-28 02:00:00'
and access_time < '2013-05-28 10:00:00'
क्योंकि आपकी तिमाही-घंटे की सीमा एक विशेष समय से लेकर पहले . के क्षण तक चलती है एक और विशेष समय। आपको <
चाहिए , नहीं <=
, आपकी समय सीमा की समाप्ति के लिए।
फिर, आपको एक एक्सप्रेशन की आवश्यकता है जो एक मनमाना DATETIME
ले सकता है एक्सप्रेशन और इसे DATETIME
. में बदलें तिमाही घंटे की शुरुआत में जिसमें यह होता है।
यह ऐसा करेगा।
DATE_FORMAT(datestamp,'%Y-%m-%d %H:00:00') +
INTERVAL (MINUTE(datestamp) -
MINUTE(datestamp) MOD 15) MINUTE
यह बदल जाता है, उदाहरण के लिए '2014-05-07 14:53:22'
, '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- समय-अंतराल/