mysql group by timestamp interval where interval has passed按时间戳间隔分组

utugiqy6  于 2021-06-20  发布在  Mysql
关注(0)|答案(1)|浏览(332)

是否可以只选择间隔已过的记录?
例如,在select with 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` 例如。
2cmtqfgy

2cmtqfgy1#

sql演示

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

相关问题