SQL Server 2005 - 以小时为单位获取以时间间隔存在的项目计数

时间:2013-12-22 09:18:25

标签: sql sql-server-2005

很抱歉可能名字很糟糕,但很难解释。所以我会在这里再试一次。 我有列[startdatetime] [enddatetime]的记录。我需要知道这些记录存在于哪个小时,每小时计算一次。

示例:

Id   Start               End
1    2013-01-01 15:00    2013-01-01 18:00
2    2013-01-01 13:00    2013-01-01 17:00
3    2013-01-01 10:00    2013-01-01 19:00

结果应该是:

Time                 Qty 
2013-01-01 10:00      1 
2013-01-01 11:00      1 
2013-01-01 12:00      1 
2013-01-01 13:00      2 
2013-01-01 14:00      2 
2013-01-01 15:00      3 
2013-01-01 16:00      3 
2013-01-01 17:00      2 
2013-01-01 18:00      1 
2013-01-01 19:00      0

这应该计算很长一段时间,也许是几个月。这个例子只有一天,因为它易于理解。

我真的不知道如何实现这一目标。非常感谢。

1 个答案:

答案 0 :(得分:0)

将此问题转为离散问题 将小时视为长度为1的时间段 然后N个连续小时是长度为N的时间段
创建一个包含日期时间列的表 在那里插入所有小时(他们不会那么多) 在那里插入,他们的开始时间(结束时间可以是 从开始时间开始暗示。)
然后从表T加入到基于
的新表 您编写的一些名为 hour_overlap 的自定义函数
这个 hour_overlap 功能应该只检查是否 时间段(连续几个小时的顺序)
包含一个小时。应该是一个微不足道的
或者,您可以将小时数转换为整数 如果你事先了解整体/全时间间隔
(从2006年1月1日开始)。并且仍然使用这个想法 一个 hour_overlap 功能,但实现它更多 很容易,因为你只需要处理整数。