বিভাগের মধ্যে স্থানান্তরিত হয়ে যাওয়া চিত্র সহায়তা ডেস্কের টিকিট। আমরা জানতে চাই যে প্রতিদিন টিকিট খোলা রয়েছে এমন প্রতিটি দিনের জন্য প্রতিটি টিকিটের জন্য বিভাগ শেষে কী আছে। সারণীতে প্রতিটি টিকিটের জন্য সর্বশেষ বিভাগ থাকে যা এটি খোলার জন্য বিভাগে পরিবর্তন হয় (শুরুতে টিকিটটি খোলার তারিখের জন্য সারি সহ এবং এটি বন্ধ হওয়ার তারিখ সহ)। ডেটা টেবিলটি এমন দেখাচ্ছে:
CREATE TABLE TicketAssigment (
TicketId INT NOT NULL,
AssignedDate DATE NOT NULL,
DepartmentId INT NOT NULL);
আমার যা দরকার তা হ'ল প্রতিটি টিকিট আইডের জন্য কোনও অনুপস্থিত তারিখ পূরণ করা, তারিখ অনুসারে অর্ডার করা পূর্ববর্তী টিকিটঅ্যাসিগমেন্ট সারি থেকে বিভাগীয় আইডি ব্যবহার করে।
আমার কাছে যদি টিকিটঅ্যাসিগমেন্ট সারিগুলি থাকে:
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;
আমি সন্দেহ করি LAG এবং একটি উইন্ডো ফ্রেম ব্যবহার করে এটি করার একটি উপায় আছে তবে আমি এটি বেশিরভাগভাবে খুঁজে পাইনি। প্রয়োজনীয়তা পূরণের আরও কার্যকর উপায় কী?