sql >> データベース >  >> RDS >> Mysql

日付ベースのレコードを15分間隔にグループ化する方法

    まず、WHEREに微妙なエラーがあります 句。必要なもの:

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

    15分の範囲は、特定の時間からの瞬間まで実行されるためです。 別の特定の時間。 <が必要です 、<=ではありません 、あなたの時間範囲の終わりのために。

    次に、任意のDATETIMEを取ることができる式が必要です。 式を作成し、DATETIMEに変換します それが発生する15分の始まりの。

    これでそれができます。

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

    たとえば、'2014-05-07 14:53:22' 、into '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-時間間隔/



    1. NetBeans 9.0、パート2のJava9でJShellを使用する

    2. MySQL-WHERE句でCOUNT(*)を使用

    3. nvarchar連結/インデックス/nvarchar(max)不可解な動作

    4. \x1a文字はどういう意味ですか