【问题标题】:T-SQL Count records over bucketed time window with zero fillT-SQL 计数零填充的分桶时间窗口上的记录
【发布时间】:2014-09-29 17:37:27
【问题描述】:

我在 SQL Server 2012 中有一个表,其中包含呼叫详细信息记录。 this SQLFiddle 中显示了架构的简化版本。

计算给定区域的调用次数很简单,但我想进一步将数据分解为离散的半小时存储桶。然后我将数据输入到图表中,因此我需要查询能够返回所有存储桶,即使我们在这些存储桶中没有调用。

有什么想法吗?

此外,我不能丢失这些值的偏移量(注意它们是DATETIMEOFFSET 类型)。我发现的大多数解决方案都涉及丢弃这些数据,因为它们只能处理 DATETIME。

【问题讨论】:

标签: sql-server tsql sql-server-2012 aggregate-functions window-functions


【解决方案1】:

在此范围内创建一个 dim_time 表或其他东西,并将时间范围插入到该表中(每半小时一个时间段,可以自动执行此填充)。

select time_id, time_start, time_end
from dim_time

现在您有一个表,其中包含您感兴趣的所有时隙...将其加入计数查询以获取与该时隙关联的计数。

一旦您的代码进入...您可以通过操作 dim_time 条目将其更改为 15 分钟块或 2 小时块或其他任何内容。

【讨论】:

  • 这应该是临时数据。查询可以运行任意时间,但通常仅在过去 24 小时或类似情况下一次性使用。我宁愿在应用程序中编写一个手动循环来完成这项工作,也不愿有一个表,其唯一目的是从源表开始到永恒结束每半小时标记一次。
  • 您只需要 48 个条目(24 * 2 个 30 分钟窗口)...这只是时间,没有日期。但是在符文时创建 48 个条目并不太难。
猜你喜欢
  • 2023-02-22
  • 2021-02-25
  • 2020-06-23
  • 1970-01-01
  • 2016-04-28
  • 2018-01-08
  • 1970-01-01
  • 1970-01-01
  • 2018-08-08
相关资源
最近更新 更多