比方说,我有两个实体:事件和活动查找使用范围值的时间表 - 实体建模
的事件是指发生在(看似)随机时间,如日出,日落,风暴,雾,等
我有这样的表:
create table Event (
eventKey int,
eventDesc varchar(100),
started datetime
)
EventKey | EventDesc | Started
1 "Sunset" 2009-07-03 6:51pm
2 "Sunrise" 2009-07-04 5:33am
3 "Fog" 2009-07-04 5:52pm
4 "Sunset" 2009-07-04 6:49pm
5 "Full Moon" 2009-07-04 10:12pm
6 "Sunrise" 2009-07-05 5:34am
然后,我有那人参加了活动表,它们涉及到事件(即动作可能是长时间运行和跨越多个活动:“周末露营”):
create table EventTask (
activityKey int,
activityDesc varchar(100),
startEventKey int,
endEventKey int
)
ActivityKey | ActivityDesc | StartEventKey | EndEventKey
123 "Camp-out" 1 5
234 "Drive home" 6 6
我要输出的由所发生的事件标志着行动的时间表:
ActivityKey | ActivityDesc | EventKey | EventDesc
123 "Camp-out" 1 "Sunset"
123 "Camp-out" 2 "Sunrise"
123 "Camp-out" 3 "Fog"
123 "Camp-out" 4 "Sunset"
123 "Camp-out" 5 "Full Moon"
234 "Drive Home" 6 "Sunrise"
是否可以编写一个查询,将在线性时间,similar to this question做到这一点?另请推荐您可以想到的索引或任何其他优化。目前的解决方案是用C#编写的,但我很喜欢快速的SQL解决方案。
什么是最佳查询来做到这一点?
我有个疑问,EventKey总是按时间排序,还是你的例子是一个特定的情况? – 2009-07-06 06:29:35
是的 - 如果有帮助,您可以假设事件密钥随时间单调递增。 – 2009-07-06 14:46:16