আমি অর্ডার একটি টেবিল পেয়েছি
Column | Type | Modifiers
------------+-----------------------------+-----------------------------------------------------
id | integer | not null default nextval('orders_id_seq'::regclass)
client_id | integer | not null
start_date | date | not null
end_date | date |
order_type | character varying | not null
ডেটাতে ক্লায়েন্ট_আইডের জন্য অ-ওভারল্যাপিং স্থায়ী অর্ডার এবং মাঝে মাঝে একটি অস্থায়ী আদেশ রয়েছে যা তার স্টার্ট_ডেটের স্থায়ী ক্রমটিকে ওভাররাইড করে যখন তাদের সাথে একটি মেলে ক্লায়েন্ট_আইড থাকে। ওভারল্যাপিং থেকে একই ধরণের অর্ডার রাখতে অ্যাপ্লিকেশন স্তরের প্রতিবন্ধকতা রয়েছে।
id | client_id | start_date | end_date | order_type
----+-----------+------------+------------+------------
17 | 11 | 2014-02-05 | | standing
18 | 15 | 2014-07-16 | 2015-07-19 | standing
19 | 16 | 2015-04-01 | | standing
20 | 16 | 2015-07-18 | 2015-07-18 | temporary
উদাহরণস্বরূপ, 2015-07-18
ক্লায়েন্টে 16 টির ক্রম অর্ডার হিসাবে # 20 এর অর্ডার রয়েছে কারণ এটি স্থায়ী আদেশ # 19 কে ওভাররাইড করে। কিছু হট্টগোলের সাথে আমি একটি তারিখে সক্রিয় অর্ডার আইডির অনুসন্ধানের কার্যকর উপায় খুঁজে পেয়েছি found
SELECT id from (
SELECT
id,
first_value(id) OVER (PARTITION BY client_id ORDER BY order_type DESC) active_order_id
FROM orders
WHERE start_date <= ? and (end_date is null OR end_date >= ?)
) active_orders
WHERE id = active_order_id
আপনি যদি 2015-07-18
স্থানধারক হিসাবে এটি নিয়ে প্রশ্ন করেন তবে আপনি পাবেন would
id
----
17
18
20
আমার অন্যান্য কিছু ধারণার তুলনায় এই ক্যোয়ারিতে ক্যোয়ারী পরিকল্পনা (যেমন কোনও তারিখে ক্লায়েন্টের জন্য অস্থায়ী আদেশের সংখ্যা গণনা করা সাব কোয়েরিগুলি) বেশ ছোট এবং আমি এতে খুশি। (টেবিলের নকশা, আমি এতে শিহরিত হই না)
এখন, আমার সক্রিয় তারিখের সাথে যোগ হওয়া তারিখের পরিসরের জন্য সমস্ত সক্রিয় অর্ডার খুঁজতে হবে। উদাহরণস্বরূপ, তারিখ পরিসর 2015-07-18
থেকে 2015-07-19
আমি নিম্নলিখিত ফলাফলের চাই।
active_date | id
------------+----
2015-07-18 | 17
2015-07-18 | 18
2015-07-18 | 20
2015-07-19 | 17
2015-07-19 | 18
2015-07-19 | 19
অর্ডার 20 ওভাররাইডে 19 টি অর্ডার করুন 2015-07-18
তবে চালু নয় 2015-07-19
।
আমি দেখতে পেলাম যে generate_series()
আমি বিভিন্ন তারিখ তৈরি করতে পারি, তবে তারিখের একটি টেবিল পেতে এবং আইডির অর্ডার দেওয়ার জন্য এটির সাথে কীভাবে যোগদান করব তা সম্পর্কে আমার কোনও ধারণা নেই। আমার কুঁচক ক্রস জয়েন কিন্তু এই পরিস্থিতিতে কীভাবে এই কাজটি করা যায় তা আমি বুঝতে পারি না।
ধন্যবাদ
আপডেট একটি বর্গক্ষেত্র ভাজা যোগ করা হয়েছে ।