mysql - MySql GROUP BY 时间戳间隔,其中间隔已过
问题描述
是否可以仅选择间隔已过的记录?
例如,在带有 group by 的选择中,对于这样的表:
TABLE (timestamp(timestamp), name(VARCHAR))
timestamp name
------------------- ----
2010-11-16 10:30:01 John
2010-11-16 10:30:02 John
2010-11-16 10:30:03 John
2010-11-16 10:30:31 John
2010-11-16 10:30:32 John
2010-11-16 10:30:33 John
查询:
SELECT max(timestamp), name, count(name)
FROM table
GROUP BY UNIX_TIMESTAMP(timestamp) DIV 30, name
结果:
timestamp name count(name)
------------------- ---- -----------
2010-11-16 10:30:03 John 3
2010-11-16 10:30:33 John 3
这将按以下记录分组:
hour:minute:00 to hour:minute:29
并来自:
hour:minute:30 to hour:minute:59
如果我在 进行查询10:30:55
,我只想获取从前一个时间间隔10:30:00
到10:30:29
(和更早)的记录,而不需要在10:30:30
到之间添加记录10:30:59
。
换句话说,如果我在某个时间间隔内查询,则在显示记录之前等待它通过。请注意,查询可能不会总是在同一秒 ( 10:30:55
)10:30:51
或其他任何时间进行。
所以该子句的结果应该是:
timestamp name count(name)
------------------- ---- -----------
2010-11-16 10:30:03 John 3
例如,如果它是在制造的2010-11-16 10:30:55
。
解决方案
SELECT max(timestamp), name, count(name)
FROM table1
WHERE UNIX_TIMESTAMP(timestamp) DIV 30 <
UNIX_TIMESTAMP('2010-11-16 10:30:55') DIV 30
GROUP BY UNIX_TIMESTAMP(timestamp) DIV 30, name
;
我对当前日期进行了硬编码,'2010-11-16 10:30:55'
但您可以改用NOW()
函数
输出
| max(timestamp) | name | count(name) |
|----------------------|------|-------------|
| 2010-11-16T10:30:03Z | John | 3 |
如果您只想要最后一组,请添加
ORDER BY UNIX_TIMESTAMP(timestamp) DIV 30 DESC
LIMIT 1
推荐阅读
- html - 仅在选中另一个框时如何使复选框“可选中”
- javascript - 在我的插槽中包装动态添加的子元素
- python - Python:按CSV中的唯一列合并重复项
- wordpress - woocommerce 下拉菜单中的可变产品价格
- javascript - Vue 2.0 渲染问题,当我实际提供不同的 id 时,它设置了 div id="1"
- javascript - 如何从 Cloud Functions 查询 Firestore 集合?
- python-3.x - Python Flask如何将python脚本中的文本打印到网页而不是控制台
- jquery - 服务器端处理后复选框在 DataTables 中不起作用
- python - 有没有办法让本地 HTML 页面在文件末尾触发 Python Tkinter GUI?
- azure-devops - 从 Azure Devops 删除工件后无法上传新包