如何在datetime SQL列中按日期和这些日期的8小时间隔进行分组和计数?

初学者的心思

我有一个带有列的表,该列visit_date是一个datetime对象,其格式YYYY-MM-DD HH:MI:SS如下所示:

visit_date         |visit_id
-------------------|-----
2010-11-01 00:02:00|92314
2010-11-01 23:05:21|23498
2010-11-01 12:42:31|12343
2010-11-02 05:13:21|79881
2010-11-02 14:35:15|22134
2010-11-02 16:12:23|12348
2010-11-03 01:22:44|12384
2010-11-03 05:23:41|12394
2010-11-03 15:13:55|99384

我想按日期和该日期的8小时窗口分组,以便:

interval           |count
-------------------|-----
2010-11-01 00:00:00|1
2010-11-01 08:00:00|2
2010-11-01 16:00:00|3
2010-11-02 00:00:00|4
2010-11-02 08:00:00|5
2010-11-02 16:00:00|6
2010-11-03 00:00:00|7
2010-11-03 08:00:00|8
2010-11-03 16:00:00|9

我的原始查询(仅使用日期)为:

SELECT CAST(visit_date as DATE), count(1) as count
FROM table
GROUP BY CAST(visit_date as DATE)
ORDER BY CAST(visit_date as DATE)

但这仅按日期分组。

是否有建议的方法来获取每天每个间隔的间隔计数?我已经看到了使用的实现DATEADDDATEPART但不确定在这种情况下哪种方法最有意义。

谢谢!

凯斯·贾德

将小时数添加到您的分组和计数中:

SELECT 
  CAST(visit_date as DATE), 
  HOUR(visit_date)/8 as ival8h
  count(1) as count
FROM table
  GROUP BY CAST(visit_date as DATE), HOUR(visit_date)/8
  ORDER BY CAST(visit_date as DATE)

hour函数返回经过日期的小时数,将其除以8得到间隔的整数,因此0到7变为0,8到16变为1,依此类推。

如果您希望将其作为固定在8h左右的时间返回,请再次将其乘以8,并将其格式化为NN:00:00,或将其添加到日期,因此:

SELECT 
  DATEADD(hour, (HOUR(visit_date)/8)*8, CAST(CAST(visit_date as DATE) as DATETIME) as quantized_date,
  count(1) as count
FROM table
  GROUP BY DATEADD(hour, (HOUR(visit_date)/8)*8, CAST(CAST(visit_date as DATE) as DATETIME)
  ORDER BY CAST(visit_date as DATE)

这基本上将小时数向下舍入较小的8h市场,并将其添加到午夜。日期上需要两次强制转换(可能),因为DATEADD不会将日期加上小时,而只将日期时间添加至日期,但是我们需要强制转换日期才能将tine元素固定为午夜

如果您希望在没有事件发生的期间有一个日期和一个0计数,请使用数字表或行生成器并创建一个日期序列以将您的真实数据左连接到该数据上,然后计算由假数据分组的真实数据日期

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

SQL Server:如何根据时间间隔(例如2小时内)按日期时间列分组

如何按小时和天分组熊猫日期时间?

如何使用 Laravel 按日期对记录进行分组和计数?

按 DATETIME 获取数据、计数和分组,其中日期间隔大于 X

如何在两列中按日期间隔分组?

如何从SQL中的datetime列显示日期和时间

如何考虑开始日期和结束日期按小时对记录进行分组

如何按小时对日期时间进行分组

如何在JavaScript中按小时/ 6小时/天/周/月/年对日期对象进行分组

如何根据时间间隔条件对行进行分组和计数

如何在Python中的指定时间段内按日期分组和对日期时间应用聚合函数?

如何将小时、分钟和秒添加到 SQL 中的日期时间列?

仅针对一天中的时间(忽略日期)和计数将 datetime 列分组 5 分钟

如何在PostgreSQL中设置两列之间带有日期和时间的间隔?

如何在MySQL中按日期对相关结果进行分组和排序

如何在半小时间隔中划分熊猫日期时间列

如何按ID和时间段对日期时间数据进行分组?

如何在更改输入[type =“ radio”]时按状态编号,日期和时间对列表进行排序?

当列还包含小时、分钟、秒、毫秒和时区时,如何按日期对 Pandas 数据框进行子集化

如何从python中的日期时间提取日期和小时?

如何从 Power Query 中的日期和小时列创建日期时间列

如何在熊猫时间序列中按日期对日期进行分组?

如何按小时对数据进行分组并保留带有时间和日期的字段(“%Y-%m-%d %H:%M:%S”)?

如何在vb.net中对整数和日期时间之间的日期时间小时求和

如何在SQL中比较和使用datetime格式中的仅时间?我的插入以日期时间格式给出

如何按日期分组日期和汇总在postgres中?

如何在不考虑时间的情况下按日期时间列进行分组

如何在输入datetime-local中显示日期和时间

如何根据 10 分钟内的日期和时间列对数据进行分组和选择?