sql >> Database >  >> RDS >> Mysql

Databaserecords groeperen in tijdsintervallen van 15 minuten

Allereerst heb je een subtiele fout in je WHERE clausule. Je hebt nodig:

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

omdat uw kwartierbereiken lopen van een bepaald tijdstip tot het moment voor een andere bepaalde tijd. Je hebt < . nodig , niet <= , voor het einde van uw tijdsbereik.

Dan hebt u een uitdrukking nodig die een willekeurige DATETIME . kan hebben uitdrukking en converteer deze naar de DATETIME van het begin van het kwartier waarin het voorkomt.

Dit zal dat doen.

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

Het wordt bijvoorbeeld '2014-05-07 14:53:22' , in '2014-05-07 14:45:00' .

Je kunt het desgewenst als een opgeslagen functie definiëren:

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 ;

U kunt uw vraag dan als volgt schrijven:

 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

Dit staat hier opgeschreven. http://www.plumislandmedia.net/mysql/sql-reporting- tijdsintervallen/



  1. Verhoog kolommen in laravel

  2. ERROR [IM014] [Microsoft][ODBC Driver Manager] De opgegeven DSN bevat een architectuurmismatch tussen het stuurprogramma en de toepassing

  3. Django + Python 3 + PostgreSQL implementeren op AWS Elastic Beanstalk

  4. $wpdb->insert werkt niet. Geen foutbericht