আমি এসকিউএল সার্ভার 2016 ব্যবহার করছি এবং আমি যে ডেটা গ্রহণ করছি তাতে নিম্নলিখিত ফর্মটি রয়েছে।
CREATE TABLE #tab (cat CHAR(1), t CHAR(2), val1 INT, val2 CHAR(1));
INSERT INTO #tab VALUES
('A','Q1',2,NULL),('A','Q2',NULL,'P'),('A','Q3',1,NULL),('A','Q3',NULL,NULL),
('B','Q1',5,NULL),('B','Q2',NULL,'P'),('B','Q3',NULL,'C'),('B','Q3',10,NULL);
SELECT *
FROM #tab;
আমি কলামগুলিতে সর্বশেষ নন-মানগুলি অর্জন করতে চাই val1
এবং val2
গোষ্ঠী অনুসারে cat
ও এর দ্বারা আদেশ পেয়েছি t
। আমি যে ফলাফলটি চাইছি তা হ'ল
cat val1 val2 A 1 P B 10 C
আমার কাছে আসা সবচেয়ে কাছেরটি ব্যবহার LAST_VALUE
করে ORDER BY
যা যা কাজ করছে না তা অগ্রাহ্য করার পরে আমার অর্ডার করা সর্বশেষ নন-মান প্রয়োজন।
SELECT DISTINCT
cat,
LAST_VALUE(val1) OVER(PARTITION BY cat ORDER BY (SELECT NULL) ) AS val1,
LAST_VALUE(val2) OVER(PARTITION BY cat ORDER BY (SELECT NULL) ) AS val2
FROM #tab
cat val1 val2 A NULL NULL B 10 NULL
প্রকৃত টেবিলটিতে cat
(তারিখ এবং স্ট্রিং কলাম) এর জন্য আরও কলাম এবং সর্বশেষ নন-মানটি নির্বাচন করতে আরও ভাল কলাম (তারিখ, স্ট্রিং এবং সংখ্যা কলাম) রয়েছে।
এই নির্বাচনটি কীভাবে করা যায় সে সম্পর্কে কোনও ধারণা।
t
মানগুলি পুনরাবৃত্তি করে। এটি ভাল আচরণ করা ডেটা নয়।
PARTITION BY cat ORDER BY t, id
উদাহরণ স্বরূপ. অন্যথায়, একই ক্যোয়ারী (যে কোনও প্রশ্নের) আপনাকে পৃথক মৃত্যুদণ্ড কার্যকর করার ক্ষেত্রে বিভিন্ন ফলাফল দিতে পারে। যদি টেবিলের কলামগুলি কেবলমাত্র আপনিই দেখান তবে আমি দেখতে পাই না তবে কীভাবে আমরা একটি নির্ধারিত আদেশ পেতে পারি!
cat
দ্বারা আদেশt
।