sql >> Databáze >  >> RDS >> Mysql

Jak seskupit záznamy v databázi do 15minutových časových intervalů

Za prvé, máte drobnou chybu v WHERE doložka. Potřebujete:

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

protože vaše čtvrthodinové rozsahy běží od určitého času do okamžiku před jiný konkrétní čas. Potřebujete < , nikoli <= , na konec vašeho časového rozsahu.

Pak potřebujete výraz, který může mít libovolný DATETIME výraz a převeďte jej na DATETIME začátku čtvrthodiny, ve které se vyskytuje.

To udělá to.

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

Otočí se, například '2014-05-07 14:53:22' , do '2014-05-07 14:45:00' .

Pokud chcete, můžete ji definovat jako uloženou funkci takto:

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 ;

Poté můžete svůj dotaz napsat takto:

 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

Tady je to napsané. http://www.plumislandmedia.net/mysql/sql-reporting- časové intervaly/



  1. Vytvořte více stránek z dotazu mysql

  2. Vytvořte spouštěč „místo“ na serveru SQL Server

  3. Otázka návrhu DB týkající se cizích klíčů s hodnotou Null a normalizace

  4. MySQL zobrazuje výsledky v abecedním pořadí, ale zobrazuje konkrétní položku před abecedně seřazeným seznamem