मैं एक बड़ी समस्या पर सड़क ब्लॉक में भाग रहा हूं।समय सीमा ओवरलैप की जांच, पहरेदार समस्या [एसक्यूएल]
एक बड़ी क्वेरी के हिस्से के रूप में मुझे "रात्रि घड़ी" समस्या को हल करने की आवश्यकता है। मैं इस तरह के रूप अनुसूची बदलाव के साथ एक मेज है:
ID | Start | End
1 | 2009-1-1 06:00 | 2009-1-1 14:00
2 | 2009-1-1 10:00 | 2009-1-1 18:00
3 | 2009-2-1 20:00 | 2009-2-2 04:00
4 | 2009-2-2 06:00 | 2009-2-2 14:00
एक प्रश्न के हिस्से के रूप में, मैं अगर वहाँ कम से कम 1 एक निश्चित समय सीमा के लिए हर समय एक कमरे में चौकीदार निर्धारित करने के लिए की जरूरत है।
इसलिए यदि मैंने 2009-1-1 06:00
से 2009-1-1 12:00
तक सीमा निर्दिष्ट की है, तो परिणाम सही है, क्योंकि इस समय अवधि को कवर करने के लिए 1 और 2 विलय बदल जाता है - वास्तव में घड़ी को बनाए रखने के लिए किसी भी प्रकार की शिफ्ट को जंजीर बनाया जा सकता है। हालांकि अगर मैंने 2009-2-1 22:00
से 2009-1-2 10:00
पर चेक किया है, तो परिणाम झूठा है क्योंकि अगली सुबह 4 और 6 बजे के बीच ब्रेक होता है।
मैं इस या तो LINQ में, या SQL सर्वर में एक उपयोगकर्ता परिभाषित समारोह (2005) के रूप में, लागू करने के लिए के रूप में दोनों ही मामलों में यह सिर्फ एक बड़ा प्रश्न के तर्क यह है कि करने के लिए चलाए किया जाना चाहिए का एक हिस्सा है चाहते हैं उन तत्वों की पहचान करें जिन्हें ध्यान देने की आवश्यकता है। वास्तविक डेटासेट में किसी भी समय अवधि को छेड़छाड़ करने वाले सौ शिफ्ट रिकॉर्ड शामिल होते हैं, लेकिन हमेशा पूरी श्रृंखला को कवर नहीं करते हैं।
मुझे सबसे नज़दीकी मिला है How to group ranged values using SQL Server संख्या सीमाओं के लिए, हालांकि यह अगली रेंज शुरू होने से ठीक पहले प्रत्येक श्रेणी पर निर्भर करता है। यदि मैं घड़ियों के समान एकीकृत दृश्य का निर्माण कर सकता हूं, तो केवल ओवरलैपिंग घड़ियों को ध्यान में रखकर, यह जांचना मुश्किल होगा कि कोई विशिष्ट समय कवर किया गया था या नहीं। एक एकीकृत दृश्य इस प्रकार दिखाई देगा:
Start | End
2009-1-1 06:00 | 2009-1-1 18:00
2009-2-1 20:00 | 2009-2-2 04:00
2009-2-2 06:00 | 2009-2-2 14:00
नोट: यह पूरी बात अपेक्षाकृत सिर्फ सभी डेटा खींच रहा है और उस पर कुछ मार्गदर्शन पाश चलाकर लागू करने के लिए आसान होगा, मौजूदा प्रणाली है, और इसके बजाय तथापि कि बदलावों की संख्या और समय सीमा की संख्या के कारण धीमा होना चाहिए।
"दिनांक अगर मैंने 200-1-112:00 से 200 9 -1-1 06:00 तक सीमा निर्दिष्ट की है, तो " 200-1-1 06:00 को उलट दिया जाना चाहिए 2009-1-1 12:00 "? – Sung
@ डेविड आप इस ईबुक को डाउनलोड करना चाहेंगे: "एसक्यूएल में टाइम-ओरिएंटेड डाटाबेस एप्लीकेशन डेवलपमेंट" (http://www.cs.arizona.edu/people/rts/tdbbook.pdf)। तारीख सीमाओं के साथ तालिकाओं पर जटिल SQL क्वेरी के बारे में इसकी बहुत अच्छी जानकारी है। –
+1 - मैं एक समान समस्या पर काम कर रहा हूं, विवादों की पहचान कर रहा हूं और – spencer7593