首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将MySQL数据分组到任意大小的时间段中

问将MySQL数据分组到任意大小的时间段中
EN

Stack Overflow用户
提问于 2010-04-06 01:19:43
回答 3查看 11.9K关注 0票数 23

在时间单位是任意的情况下,如何根据每单位时间的时间戳列来统计MySQL表中的记录数?

具体地说,我想要计算在给定的时间间隔内,有多少记录的时间戳落入15分钟的存储桶中。我了解如何使用MySQL日期函数在1秒、1分钟、1小时、1天等的存储桶中执行此操作,例如

代码语言:javascript
复制
SELECT YEAR(datefield) Y, MONTH(datefield) M, DAY(datefield) D, COUNT(*) Cnt FROM mytable GROUP BY YEAR(datefield), MONTH(datefield), DAY(datefield)

但是我怎么能按15分钟的时段分组呢?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-04-06 01:36:19

代码语言:javascript
复制
GROUP BY
    YEAR(datefield),
    MONTH(datefield),
    DAY(datefield),
    HOUR(datefield),
    FLOOR(MINUTE(datefield)/15)

你也可以直接说:

代码语言:javascript
复制
SELECT FLOOR(UNIX_TIMESTAMP(datefield)/900) AS t, COUNT(*) AS cnt
FROM mytable
GROUP BY t

应用程序负责将每15分钟的时间戳格式化为可读的y/m/d/h/m。(如果您需要在一个疯狂的、不按一刻钟对齐的时区中使用本地时间,则需要一个hack偏移量。)

票数 27
EN

Stack Overflow用户

发布于 2010-04-06 01:31:27

如何获得(小时( DateField )* 60 +分钟( DateField )) / YourInterval的整数。

这样,无论你的时间间隔是多少,通过包括小时* 60分钟,它将在给定的一天中按顺序保持它,并且你不会只处理每小时15分钟,而是每小时15分钟……将该列添加到group by子句中,您可以通过其序号位置来执行此操作。

票数 4
EN

Stack Overflow用户

发布于 2010-04-06 01:51:32

让您思考一下,这里有一个FLOOR(MINUTE(datefield)/15)解决方案的替代方案:

代码语言:javascript
复制
GROUP BY CASE
WHEN MINUTES(datetime) BETWEEN 0 AND 14 THEN 0
WHEN MINUTES(datetime) BETWEEN 15 AND 29 THEN 1
WHEN MINUTES(datetime) BETWEEN 30 AND 44 THEN 2
WHEN MINUTES(datetime) BETWEEN 45 AND 59 THEN 3
END
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2579803

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档