पिक्चर हेल्प डेस्क टिकट जो विभागों के बीच स्थानांतरित हो जाते हैं। हम जानना चाहते हैं कि प्रत्येक दिन प्रत्येक टिकट के लिए विभाग दिन के अंत में क्या है कि टिकट खुला है। तालिका में प्रत्येक दिन के लिए प्रत्येक टिकट के लिए अंतिम विभाग होता है, जिस पर यह विभाग में बदलाव होता है (जिस तारीख को शुरू में टिकट खोला गया था और जिस तारीख को इसे बंद किया गया था, उसके लिए एक पंक्ति भी शामिल है)। डेटा तालिका इस प्रकार है:
CREATE TABLE TicketAssigment (
TicketId INT NOT NULL,
AssignedDate DATE NOT NULL,
DepartmentId INT NOT NULL);
मुझे प्रत्येक TicketId के लिए किसी भी लापता तिथियों को भरने की आवश्यकता है, तिथि द्वारा आदेशित पिछले TicketAssigment पंक्ति से विभाग का उपयोग करके।
अगर मेरे पास इस तरह TicketAssigment पंक्तियाँ हैं:
1, '1/1/2016', 123 -- Opened
1, '1,4,2016', 456 -- Transferred and closed
2, '1/1/2016', 25 -- Opened
2, '1/2/2016', 52 -- Transferred
2, '1/4/2016', 25 -- Transferred and closed
मुझे यह आउटपुट चाहिए:
1, '1/1/2016', 123
1, '1/2/2016', 123
1, '1/3/2016', 123
1, '1/4/2016', 456
2, '1/1/2016', 25
2, '1/2/2016', 52
2, '1/3/2016', 52
2, '1/4/2016', 25
ऐसा लगता है कि यह मेरी ज़रूरत के करीब हो सकता है, लेकिन मुझे इसे खत्म करने का धैर्य नहीं था, और अनुमानित योजना लागत में 6 अंक हैं:
SELECT l.TicketId, c.Date, MIN(l.DepartmentId)
FROM dbo.Calendar c
OUTER APPLY (SELECT TOP 1 TicketId, DepartmentId FROM TicketAssigment WHERE AssignedDate <= c.Date ORDER BY AssignedDate DESC) l
WHERE c.Date <= (SELECT MAX(AssignedDate) FROM TicketAssigment)
GROUP BY l.TicketId, c.Date
ORDER BY l.TicketId, c.Date;
मुझे संदेह है कि एलएजी और एक खिड़की के फ्रेम का उपयोग करने का एक तरीका है, लेकिन मुझे यह पता नहीं चला है। आवश्यकता को पूरा करने का एक अधिक कुशल तरीका क्या है?