比方說,我有兩個實體:事件和活動查找使用範圍值的時間表 - 實體建模
的事件是指發生在(看似)隨機時間,如日出,日落,風暴,霧,等
我有這樣的表:
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