分组为多个列的间隔

时间:2018-01-17 22:47:27

标签: mysql sql group-by

我有一个像这样的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      |

1 个答案:

答案 0 :(得分:2)

编写一个子查询,获取每个组中的第一个和最后一个时间戳,然后与这些时间戳连接以获得相应的startvendv

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

DEMO

每隔5分钟,您应该除以300,而不是900(即15分钟)。