我有一个像这样的MySql表:
+-------+---------------------+---------------------+------------+------------+
| id | starttime | endtime | startv | endv |
+-------+---------------------+---------------------+------------+------------+
| 66612 | 2018-01-15 17:14:00 | 2018-01-15 17:14:59 | 0.01 | 1.002 |
| 66611 | 2018-01-15 17:13:00 | 2018-01-15 17:13:59 | 5.002 | 0.211 |
| 66610 | 2018-01-15 17:12:00 | 2018-01-15 17:12:59 | 1.001 | 2.011 |
| 66609 | 2018-01-15 17:11:00 | 2018-01-15 17:11:59 | 0.678 | 0.751 |
| 66607 | 2018-01-15 17:10:00 | 2018-01-15 17:10:59 | 0.201 | 1.752 |
我可以在以下时间范围内分组为5分钟的间隔:
SELECT * from activation
GROUP BY UNIX_TIMESTAMP(starttime) DIV 900
ORDER BY starttime DESC;
我目前的输出是:
| 2018-01-15 17:10:00 | 2018-01-15 17:10:59 | 0.201 | 1.752 |
这给我一张按开始时间和正确的" startv"分组的表格。 (表中的0.201),我需要的是将其与包含" endv"的列连接。与该组的最后一个值匹配的值(最后一个" endtime" 1.002)而不是1.752与正确的" endtime"像:
+---------------------+---------------------+------------+------------+
| starttime | endtime | startv | endv |
+---------------------+---------------------+------------+------------+
| 2018-01-15 17:10:00 | 2018-01-15 17:14:59 | 0.201 | 1.002 |
答案 0 :(得分:2)
编写一个子查询,获取每个组中的第一个和最后一个时间戳,然后与这些时间戳连接以获得相应的startv
和endv
。
SELECT r.starttime, r.endtime, afirst.startv, alast.endv
FROM (SELECT MIN(starttime) as starttime, MAX(endtime) AS endtime
FROM activation
GROUP BY UNIX_TIMESTAMP(starttime) DIV 300) AS r
JOIN activation AS afirst ON afirst.starttime = r.starttime
JOIN activation AS alast ON alast.endtime = r.endtime
ORDER BY r.starttime DESC
每隔5分钟,您应该除以300
,而不是900
(即15分钟)。