मुझे यह कहकर शुरू करना है कि मुझे पता है कि मेरा विषय बिल्कुल सही नहीं है लेकिन मुझे नहीं पता कि इसे कैसे वाक्यांशित किया जाए।एसक्यूएल दो बार पंक्तियों को संसाधित करने से जुड़ते हैं
बजाय समझाने के लिए मुझे क्या करना कोशिश कर रहा हूँ कोशिश, मैं आपको दिखाते हैं:
नीचे मेरी मेज से उचित डेटा का एक टुकड़ा है (मैं मूल्यों के लिए दिनांक/समय क्षेत्रों ट्रिम में बदलने का उपयोग कर रहा हूँ हमें चाहिए। सभी तिथियां "एक्सएक्स/एक्सएक्स/XXX एक्स 00: 00: 00.000" हैं और हर बार "01/01/1900 एक्सएक्स: एक्सएक्स: एक्सएक्सओएस" है जहां एक्सएक्स एक वास्तविक मूल्य है और 00 प्लेसहोल्डर है)।
CALLNBR DATE START END
----------- ---------- ---------- ----------
0000182867 03/07/2012 10:55:00 12:20:00
0000182867 03/07/2012 12:20:00 13:00:00
0000182779 03/06/2012 14:29:00 15:03:00
0000182749 03/06/2012 15:15:00 15:30:00
0000182748 03/07/2012 10:40:00 12:30:00
0000182748 03/07/2012 12:30:00 13:20:00
0000182740 03/06/2012 11:00:00 11:30:00
0000182740 03/06/2012 11:30:00 12:00:00
0000182735 03/07/2012 09:10:00 10:00:00
0000182735 03/07/2012 10:00:00 10:40:00
0000182735 03/06/2012 14:40:00 15:10:00
0000182735 03/06/2012 15:10:00 15:30:00
0000182735 03/06/2012 15:30:00 16:45:00
मुझे समय को स्ट्रिंग करने की आवश्यकता है जहां एक रिकॉर्ड अंत समय अगले के प्रारंभ समय है। मैं एक परिणाम के लिए इसी तरह की प्राप्त करने के लिए कोशिश कर रहा हूँ (CALLNBR 182,735 छानने का आधार):
CallNbr DATE t1Start t1end t2Start t2end t3Start t3end
----------- ---------- ---------- ---------- ---------- ---------- ---------- ----------
0000182735 03/06/2012 14:40:00 15:10:00 15:10:00 15:30:00 15:30:00 16:45:00
0000182735 03/07/2012 09:10:00 10:00:00 10:00:00 10:40:00 NULL NULL
लेकिन परिणाम मैं हो रही है:
CallNbr DATE t1Start t1end t2Start t2end t3Start t3end
----------- ---------- ---------- ---------- ---------- ---------- ---------- ----------
0000182735 03/06/2012 14:40:00 15:10:00 15:10:00 15:30:00 15:30:00 16:45:00
0000182735 03/06/2012 15:10:00 15:30:00 15:30:00 16:45:00 NULL NULL
0000182735 03/07/2012 09:10:00 10:00:00 10:00:00 10:40:00 NULL NULL
मेरे मुद्दा बीच रिकॉर्ड, जिनके मान में हैं के साथ है पहले रिकॉर्ड लौटे:
0000182735 03/06/2012 15:10:00 15:30:00 15:30:00 16:45:00 NULL NULL
दुर्भाग्य से मैं t3Start या t3End द्वारा NULLS को दबाने नहीं कर सकते क्योंकि उस के लिए रिकॉर्ड (इस उदाहरण में) 2012/03/07 को खत्म करेगा। (मेरे CONVERT'ers इसे और अधिक पठनीय बनाने के लिए, मैं बाहर अलग करना रहा हूँ)
0000182735 03/07/2012 09:10:00 10:00:00 10:00:00 10:40:00 NULL NULL
और अब चयन के लिए:
SELECT
t1.CallNbr,
t1.STRTDATE,
t1.strttime as t1Start,
t1.endtme as t1end,
t2.strttime as t2Start,
t2.endtme as t2end,
t3.strttime as t3Start,
t3.endtme as t3end
FROM TableA t1
INNER JOIN TableA t2 ON t1.endtme = t2.strttime
AND t1.strtdate = t2.strtdate
AND t1.CALLNBR = t2.CALLNBR
AND t1.LINITMTYP = 'L'
LEFT JOIN TableA t3 ON t3.CALLNBR = t2.CALLNBR
AND t3.strttime = t2.endtme
AND t3.strtdate = t1.strtdate
WHERE t1.CALLNBR = '0000182735'
ORDER BY t1.CALLNBR, t1.strtdate
भले ही आप मदद नहीं कर सकता, समय निकालने के लिए धन्यवाद इसके माध्यम से पढ़ने के लिए।
धन्यवाद,
फिलिप
एसक्यूएल में से कौन सा स्वाद में जोड़ा उपयोग कर किसी भी ओवरलैप की अनुमति नहीं दे की अतिरिक्त सुरक्षा जोड़ सकते हैं? –
सुझाव: तिथि/समय पर विभिन्न जोड़ों को उस खंड में ले जाएं जहां मुख्य जुड़ें सिर्फ आईडी पर हैं। निदान/इलाज के लिए आसान हो सकता है। –
यदि आपको कोई फर्क नहीं पड़ता है, तो मैंने आपकी क्वेरी को दोबारा सुधार दिया है। दो चीजें: 1. आपकी समस्या में 'LINITMTYP 'महत्वपूर्ण है? 2. आप पहले (आंतरिक) का उपयोग क्यों कर रहे हैं और दूसरे में शामिल हो गए हैं? – biziclop