I have a mysql table "VIEWERS" :
c_id C_time C_count
-------------------------------------------------
C1 2020-01-15 09:00:00 125
C2 2020-01-15 09:00:00 135
C1 2020-01-15 09:05:00 115
C2 2020-01-15 09:05:00 155
C1 2020-01-15 09:10:00 175
C2 2020-01-15 09:10:00 25
C1 2020-01-15 09:15:00 325
C2 2020-01-15 09:15:00 425
C1 2020-01-15 09:20:00 325
C2 2020-01-15 09:20:00 425
C1 2020-01-15 09:25:00 225
C2 2020-01-15 09:25:00 725
How do I query the database to return average C_count
of C_id
between 10 minutes gap in column wise. as follows :
C_time C1 C2
------------------------------------------------------
2020-01-15 09:00:00 120 145
2020-01-15 09:10:00 250 225
2020-01-15 09:20:00 275 575
Use UNIX_TIMESTAMP to convert datetime value. Do a floor division by 10 min x 60 second, then multiply it by 10x60 again. Then aggregate based on that division.
SELECT
FROM_UNIXTIME(v1.c_unix_floor) datetime_interval10min,
AVG(IF(v1.c_id='C1', v1.c_count, NULL)) total_c1,
AVG(IF(v1.c_id='C2', v1.c_count, NULL)) total_c2
FROM (
SELECT v.c_id, v.c_count, FLOOR(UNIX_TIMESTAMP(v.c_time) / (10*60)) * (10*60) AS c_unix_floor
FROM viewers v
) AS v1 GROUP BY FROM_UNIXTIME(v1.c_unix_floor);
Result:
MariaDB [test]> SELECT
-> FROM_UNIXTIME(v1.c_unix_floor) datetime_interval10min,
-> AVG(IF(v1.c_id='C1', v1.c_count, NULL)) total_c1,
-> AVG(IF(v1.c_id='C2', v1.c_count, NULL)) total_c2
-> FROM (
-> SELECT v.c_id, v.c_count, FLOOR(UNIX_TIMESTAMP(v.c_time) / (10*60)) * (60*10) AS c_unix_floor
-> FROM viewers v
-> ) AS v1 GROUP BY FROM_UNIXTIME(v1.c_unix_floor);
+------------------------+----------+----------+
| datetime_interval10min | total_c1 | total_c2 |
+------------------------+----------+----------+
| 2020-01-15 09:00:00 | 120 | 145 |
| 2020-01-15 09:10:00 | 250 | 225 |
| 2020-01-15 09:20:00 | 275 | 575 |
+------------------------+----------+----------+
3 rows in set (0.00 sec)
Table creation query:
CREATE viewers AS
SELECT 'C1' c_id,'2020-01-15 09:00:00' c_time,'125' c_count UNION
SELECT 'C2','2020-01-15 09:00:00','135' UNION
SELECT 'C1','2020-01-15 09:05:00','115' UNION
SELECT 'C2','2020-01-15 09:05:00','155' UNION
SELECT 'C1','2020-01-15 09:10:00','175' UNION
SELECT 'C2','2020-01-15 09:10:00','25' UNION
SELECT 'C1','2020-01-15 09:15:00','325' UNION
SELECT 'C2','2020-01-15 09:15:00','425' UNION
SELECT 'C1','2020-01-15 09:20:00','325' UNION
SELECT 'C2','2020-01-15 09:20:00','425' UNION
SELECT 'C1','2020-01-15 09:25:00','225' UNION
SELECT 'C2','2020-01-15 09:25:00','725'
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.