sql >> Database teknologi >  >> RDS >> Mysql

Sådan grupperer du databaseposter i 15-minutters tidsintervaller

Først og fremmest har du en subtil fejl i din WHERE klausul. Du skal bruge:

where access_time >= '2013-05-28 02:00:00' 
  and access_time < '2013-05-28 10:00:00'

fordi dine kvarterstimer løber fra et bestemt tidspunkt til øjeblikket før en anden bestemt tid. Du skal bruge < , ikke <= , for slutningen af ​​dit tidsinterval.

Så har du brug for et udtryk, der kan tage en vilkårlig DATETIME udtryk og konverter det til DATETIME af begyndelsen af ​​det kvarter, hvor det forekommer.

Dette vil gøre det.

DATE_FORMAT(datestamp,'%Y-%m-%d %H:00:00') +
            INTERVAL (MINUTE(datestamp) -
                      MINUTE(datestamp) MOD 15) MINUTE

Den bliver f.eks. '2014-05-07 14:53:22' , ind i '2014-05-07 14:45:00' .

Du kan definere den som en gemt funktion som denne, hvis du vil:

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 ;

Du kan derefter skrive din forespørgsel sådan her:

 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

Det er skrevet her. http://www.plumislandmedia.net/mysql/sql-reporting- tidsintervaller/



  1. Hvordan opretter man en database fra shell-kommando?

  2. Log til fil via PHP eller log til MySQL-database - hvad er hurtigere?

  3. WordPress MediaWiki integration

  4. Hvordan implementerer man SQLite-database til at gemme bitmapbillede og tekst?