很抱歉可能名字很糟糕,但很难解释。所以我会在这里再试一次。 我有列[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
这应该计算很长一段时间,也许是几个月。这个例子只有一天,因为它易于理解。
我真的不知道如何实现这一目标。非常感谢。
答案 0 :(得分:0)
将此问题转为离散问题
将小时视为长度为1的时间段
然后N个连续小时是长度为N的时间段
创建一个包含日期时间列的表
在那里插入所有小时(他们不会那么多)
在那里插入,他们的开始时间(结束时间可以是
从开始时间开始暗示。)
然后从表T加入到基于
的新表
您编写的一些名为 hour_overlap 的自定义函数
这个 hour_overlap 功能应该只检查是否
时间段(连续几个小时的顺序)
包含一个小时。应该是一个微不足道的
或者,您可以将小时数转换为整数
如果你事先了解整体/全时间间隔
(从2006年1月1日开始)。并且仍然使用这个想法
一个 hour_overlap 功能,但实现它更多
很容易,因为你只需要处理整数。