এই জাতীয় সংখ্যার সাথে আমার কিছু টেবিল রয়েছে (স্ট্যাটাসটি নিখরচায় বা অ্যাসাইনযুক্ত)
id_set নম্বর স্থিতি ----------------------- 1 000001 নির্ধারিত 1 000002 বিনামূল্যে 1 000003 নিযুক্ত 1 000004 বিনামূল্যে 1 000005 বিনামূল্যে 1 000006 নির্ধারিত 1 000007 নির্ধারিত 1 000008 বিনামূল্যে 1 000009 বিনামূল্যে 1 000010 বিনামূল্যে 1 000011 নিযুক্ত 1 000012 নির্ধারিত 1 000013 নিযুক্ত 1 000014 বিনামূল্যে 1 000015 নির্ধারিত ED
এবং আমার পরপর "n" সন্ধান করা দরকার, সুতরাং এন = 3 এর জন্য, কোয়েরিটি ফিরে আসবে
1 000008 বিনামূল্যে 1 000009 বিনামূল্যে 1 000010 বিনামূল্যে
এটি প্রতিটি আইডি_সেটের প্রথম সম্ভাব্য গোষ্ঠীটি ফিরে আসবে (বাস্তবে, এটি প্রতিটি ক্যোয়ারী আইডি_সেটের জন্যই কার্যকর করা হবে)
আমি উইন্ডো ফাংশনগুলি যাচাই করছিলাম, কিছু প্রশ্নের মতো চেষ্টা করেছি COUNT(id_number) OVER (PARTITION BY id_set ROWS UNBOUNDED PRECEDING)
, তবে আমি যা পেয়েছি তা সবই :) আমি যুক্তি নিয়ে ভাবতে পারিনি, পোস্টগ্রিসে কীভাবে এটি করা যায়।
আমি উইন্ডো ফাংশন ব্যবহার করে ভার্চুয়াল কলাম তৈরি করার কথা ভাবছিলাম যেখানে প্রতিটি সংখ্যার জন্য পূর্ববর্তী সারিগুলি গণনা করা হয় যেখানে স্থিতি = 'বিনামূল্যে', তারপরে প্রথম সংখ্যাটি নির্বাচন করুন, যেখানে গণনাটি আমার "এন" সংখ্যার সমান।
অথবা স্থিতি অনুসারে গোষ্ঠী সংখ্যাগুলি হতে পারে তবে কেবলমাত্র একটি অ্যাসাইনগড থেকে অন্য এসএসআইএনএডে এবং কেবলমাত্র কমপক্ষে "এন" সংখ্যাযুক্ত গ্রুপ নির্বাচন করুন
সম্পাদনা
আমি এই ক্যোয়ারীটি পেয়েছি (এবং এটি কিছুটা পরিবর্তন করেছি)
WITH q AS
(
SELECT *,
ROW_NUMBER() OVER (PARTITION BY id_set, status ORDER BY number) AS rnd,
ROW_NUMBER() OVER (PARTITION BY id_set ORDER BY number) AS rn
FROM numbers
)
SELECT id_set,
MIN(number) AS first_number,
MAX(number) AS last_number,
status,
COUNT(number) AS numbers_count
FROM q
GROUP BY id_set,
rnd - rn,
status
ORDER BY
first_number
যা নিখরচায় / নিযুক্ত সংখ্যার গ্রুপ তৈরি করে তবে আমি শর্তটি পূরণ করে এমন একমাত্র প্রথম গ্রুপের সমস্ত নম্বর পেতে চাই