【发布时间】:2012-03-07 15:36:06
【问题描述】:
我正在处理一个 SSRS / SQL 项目并尝试编写一个查询来获取日期之间的间隔,我完全不知道如何编写这个。基本上我们有许多可以安排使用的设备,我需要不使用时显示的报告。
我有一个包含设备 ID、EventStart 和 EventEnd 时间的表,我需要运行查询以获取每个设备的这些事件之间的时间,但我不确定如何执行此操作。
例如:
Device 1 Event A runs from `01/01/2012 08:00 - 01/01/2012 10:00`
Device 1 Event B runs from `01/01/2012 18:00 - 01/01/2012 20:00`
Device 1 Event C runs from `02/01/2012 18:00 - 02/01/2012 20:00`
Device 2 Event A runs from `01/01/2012 08:00 - 01/01/2012 10:00`
Device 2 Event B runs from `01/01/2012 18:00 - 01/01/2012 20:00`
我的查询应该有它的结果
`Device 1 01/01/2012 10:00 - 01/01/2012 18:00`
`Device 1 01/01/2012 20:00 - 02/01/2012 18:00`
`Device 2 01/01/2012 10:00 - 01/01/2012 18:00`
此表中平均大约有 4 到 5 台设备,可能有 200 到 300 多个事件。
更新:
好的,我会更新这个以尝试提供更多信息,因为我似乎没有很好地解释这一点(对不起!)
我正在处理的是一个包含事件详细信息的表格,每个事件都是飞行模拟器的预订,我们有许多飞行模拟(称为表中的设备),我们正在尝试生成一个SSRS 报告,我们可以提供给客户以显示每个 sim 可用的天数/时间。
所以我将传入一个开始/结束日期参数并选择这些日期之间的所有可用性。结果应显示为:
Device Available_From Available_To
1 01/01/2012 10:00 01/01/2012 18:00`
1 01/01/2012 20:00 02/01/2012 18:00`
2 01/01/2012 10:00 01/01/2012 18:00`
虽然事件有时会重叠,但这种情况非常罕见,而且由于数据错误,一个设备上的事件与不同设备上的事件重叠并不重要,因为我需要分别了解每个设备的可用性。
【问题讨论】:
-
设备 ID 重要吗?或者您想查找结束日期和下一个开始日期之间的时间,而不考虑设备?
-
事件可以相互重叠吗?例如,根据上面的示例数据,您是否还可以让设备 3 事件 C 从 01/01/2012 09:00 - 01/01/2012 11:00 运行?
-
我添加了 gaps-and-islands 标签。这里有很多 G&I 问题。顺便说一句:问题定义不明确:什么是事件?您在解决方案中哪里需要它?
-
感谢@wildplasser 我已经更新了这个问题,希望能添加更多细节。
-
{device=1, event='C'} 向后运行?顺便说一句:请使用 ISO 日期格式。 (MDY 是邪恶的......)
标签: sql stored-procedures gaps-and-islands