복붙노트

[SQL] 15 분 간격으로 그룹 MySQL의 쿼리

SQL

15 분 간격으로 그룹 MySQL의 쿼리

나는 데이터마다 n 초를 수집하는 모니터링 시스템을 가지고 (n은 약 10 만 다름)했습니다. 나는 15 분 간격으로 수집 된 데이터를 집계하고 싶습니다. 작업에 그룹화 수 있도록 15 개 덩어리에 타임 스탬프 값을 통합 할 수있는 방법이 있습니까?

해결법

  1. ==============================

    1.

    SELECT   FLOOR(UNIX_TIMESTAMP(timestamp)/(15 * 60)) AS timekey
    FROM     table
    GROUP BY timekey;
    
  2. ==============================

    2.당신은 초 간격으로 15 * 60을 변경할 수 있습니다, 간격 15 분 레코드 그룹화이 당신이 필요 시도

    당신은 초 간격으로 15 * 60을 변경할 수 있습니다, 간격 15 분 레코드 그룹화이 당신이 필요 시도

    SELECT sec_to_time(time_to_sec(datefield)- time_to_sec(datefield)%(15*60)) as intervals from tablename
    group by intervals
    
  3. ==============================

    3.아래의 방법 1)의 적응 :

    아래의 방법 1)의 적응 :

    select Round(date_format(date, "%i") / (15*60)) AS interval  
    from table
    group by interval 
    

    아래의 방법 3)의 적응 :

    SELECT Round(Convert(substring(date_column, 14, 2), UNSIGNED) / (15*60)) AS interval /* e.g. 2009-01-04 12:20:00 */
    FROM table 
    GROUP BY interval;
    

    내가 여기 발견 한 몇 가지 방법 :

    1)

    select date_format(date, "%W") AS `Day of the week`, sum(cost)
    from daily_cost
    group by `Day of the week` 
    order by date_format(date, "%w")
    

    2)

    select count(*) as 'count', 
      date_format(min(added_on), '%Y-%M-%d') as 'week commencing',
      date_format(added_on, '%Y%u') as 'week' 
    from system 
    where added_on >= '2007-05-16' 
    group by week 
    order by 3 desc;
    

    3)

    SELECT substring(postdate, 1,10) AS dd, COUNT(id) FROM MyTable GROUP BY dd;
    

    (또한 여기 : http://www.bradino.com/mysql/dayparting-on-datetime-field-using-substring/)

    편집 : 모든 솔루션은 많은 수의 레코드가있는 테이블에 심하게 수행합니다.

  4. ==============================

    4.나는 unutbu에 의해 위에 주어진 답을 시작했지만 내가 필요하고 여기에 조금 추가 한 것을 얻을하지 않았다.

    나는 unutbu에 의해 위에 주어진 답을 시작했지만 내가 필요하고 여기에 조금 추가 한 것을 얻을하지 않았다.

    GroupTime 만든, FROM_UNIXTIME ((UNIX_TIMESTAMP이 (작성) / (15 * 60)) * (15 * 60) FLOOR)을 선택, Cnt 필드로서 COUNT (*) 문제 난 FROM GROUP BY GroupTime

    15 분의 범위에서 900 초씩이 코드 분할 다음 층은 (900)에 의해 백업 값 승산은 본질적으로 가까운로 15 분 증분으로 내림.

  5. ==============================

    5.쿼리 그룹 행을 다음과 것은 15 분 간격으로 타임 스탬프를 생성합니다.

    쿼리 그룹 행을 다음과 것은 15 분 간격으로 타임 스탬프를 생성합니다.

    Select concat( date(created_dt) , ' ', sec_to_time(time_to_sec(created_dt)- time_to_sec(created_dt)%(15*60) + (15*60)))as created_dt_new from table_name group by created_dt_new 
    

    예 : 타임 스탬프 2016년 11월 9일 13시 16분 29초 2016년 11월 9일 13시 16분 49초 2016년 11월 9일 13시 17분 6초 2016년 11월 9일 13시 17분 26초 2016년 11월 9일 13시 18분 24초 2016년 11월 9일 13시 19분 59초 2016년 11월 9일 13시 21분 17초

    2016년 11월 9일 13시 30분 0초로 분류됩니다

  6. ==============================

    6.유닉스 타임 스탬프 : 바닥 그 ​​다음 중 하나를 사용하여 가장 가까운 15분에 :

    유닉스 타임 스탬프 : 바닥 그 ​​다음 중 하나를 사용하여 가장 가까운 15분에 :

    timestamp div (15 * 60) * (15 * 60) -- div is integer division operator
    timestamp - timestamp % (15 * 60)
    

    날짜 시간 : 데이터 유형을 가정하면, 바닥 분수 초이없는 그들 근처로 15 분 사용 :

    date - INTERVAL EXTRACT(SECOND FROM date) SECOND - INTERVAL EXTRACT(MINUTE FROM date) % 15 MINUTE
    

    DBFiddle

  7. ==============================

    7.이것은 나를 위해 일한

    이것은 나를 위해 일한

    mysql> **SELECT FROM_UNIXTIME(UNIX_TIMESTAMP(NOW())- UNIX_TIMESTAMP(NOW())%(15*60));**
    +---------------------------------------------------------------------+
    | FROM_UNIXTIME(UNIX_TIMESTAMP(NOW())- UNIX_TIMESTAMP(NOW())%(15*60)) |
    +---------------------------------------------------------------------+
    | 2012-02-09 11:15:00                                                 |
    +---------------------------------------------------------------------+
    1 row in set (0.00 sec)
    
  8. ==============================

    8.나를 위해이 작품

    나를 위해이 작품

    SELECT CONCAT (
            YEAR(transactionDate)
            ,'-'
            ,MONTH(transactionDate)
            ,'-'
            ,DAYOFMONTH(transactionDate)
            ,' '
            ,HOUR(transactionDate)
            ,':'
            ,((floor((MINUTE(transactionDate) / 15)) + 1) * 15) - 1
            ,':59'
            ) AS tmp1
        ,count(*)
    FROM tablename
    GROUP BY tmp1 limit 20;
    
  9. ==============================

    9.당신을 간격에 어떤 변경 "(15)"합니다.

    당신을 간격에 어떤 변경 "(15)"합니다.

    select count(*),
    CONCAT(HOUR(col_date),":",(MINUTE(create_date) div 15)*15) as date
    from tablename
    GROUP BY date
    ORDER BY col_date ASC;
    
  10. from https://stackoverflow.com/questions/2793994/group-mysql-query-by-15-min-intervals by cc-by-sa and MIT license