sql >> Databasteknik >  >> RDS >> Mysql

Så här grupperar du databasposter i 15 minuters tidsintervall

Först och främst har du ett subtilt fel i din WHERE klausul. Du behöver:

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

eftersom dina kvarttimmesintervall löper från en viss tidpunkt till ögonblicket före en annan speciell tid. Du behöver < , inte <= , för slutet av ditt tidsintervall.

Sedan behöver du ett uttryck som kan ta en godtycklig DATETIME uttryck och konvertera det till DATETIME av början av den kvartstimme då det inträffar.

Detta kommer att göra det.

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

Det blir till exempel '2014-05-07 14:53:22' , till '2014-05-07 14:45:00' .

Du kan definiera den som en lagrad funktion så här om du vill:

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 sedan skriva din fråga så här:

 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

Detta är skrivet här. http://www.plumislandmedia.net/mysql/sql-reporting- tidsintervall/



  1. mysql infoga frågeresultat med flera rader i tabellen

  2. Använda Oracle JDeveloper 12c med Oracle Database, del 1

  3. Räknar flera rader i MySQL i en fråga

  4. Hur man använder rollerna som har ändrats i MySQL 8.0