আমি একটি টেবিলের সাথে প্রায় এক বিলিয়ন সারি ডেটা পেয়েছি এবং একটি নাম্বার এবং পূর্ণসংখ্যা 1-288 এর মধ্যে রয়েছে। প্রদত্ত নামের জন্য , প্রতিটি অন্তর্লিপি অনন্য এবং পরিসরের প্রতিটি সম্ভাব্য পূর্ণসংখ্যার উপস্থিতি নেই - তাই ফাঁক রয়েছে।
এই ক্যোয়ারী একটি উদাহরণ কেস উত্পন্ন করে:
--what I have:
SELECT *
FROM ( VALUES ('foo', 2),
('foo', 3),
('foo', 4),
('foo', 10),
('foo', 11),
('foo', 13),
('bar', 1),
('bar', 2),
('bar', 3)
) AS baz ("name", "int")
আমি প্রতিটি নাম এবং ধারাবাহিক সংখ্যার ক্রমিকের জন্য সারি সহ একটি সন্ধানের সারণী তৈরি করতে চাই। এই জাতীয় প্রতিটি সারিতে থাকবে:
নাম - এর মান নাম কলাম
শুরু - সংলগ্ন ক্রমানুসারে প্রথম পূর্ণসংখ্যা
শেষ - সংলগ্ন ক্রমানুসারে চূড়ান্ত মান
বিঘত - শেষ - শুরুর +1
এই কোয়েরি উপরের উদাহরণের জন্য উদাহরণ আউটপুট উত্পন্ন করে:
--what I need:
SELECT *
FROM ( VALUES ('foo', 2, 4, 3),
('foo', 10, 11, 2),
('foo', 13, 13, 1),
('bar', 1, 3, 3)
) AS contiguous_ranges ("name", "start", "end", span)
কারণ আমার কাছে অনেকগুলি সারি রয়েছে, আরও দক্ষ আরও ভাল efficient এটি বলেছিল, আমাকে কেবল একবার এই ক্যোয়ারী চালাতে হবে, সুতরাং এটি চূড়ান্ত প্রয়োজনীয়তা নয়।
আগাম ধন্যবাদ!
সম্পাদনা:
আমার যুক্ত করা উচিত যে পিএল / পিজিএসকিউএল সমাধানগুলি স্বাগত ((দয়া করে কোনও অভিনব ট্রিকস ব্যাখ্যা করুন - আমি এখনও পিএল / পিজিএসকিউএল এ নতুন)।