আমার দুটি সিস্টেমের মধ্যে ডেটা রূপান্তর করতে হবে।
প্রথম সিস্টেম তারিখের একটি সরল তালিকা হিসাবে সময়সূচী সংরক্ষণ করে। তফসিলের অন্তর্ভুক্ত প্রতিটি তারিখ এক সারি। তারিখের ক্রমটিতে বিভিন্ন ফাঁক থাকতে পারে (সাপ্তাহিক ছুটি, পাবলিক ছুটির দিন এবং আরও বিরতি, সপ্তাহের কিছু দিন সময়সূচী থেকে বাদ দেওয়া যেতে পারে)। মোটেও কোনও ফাঁক থাকতে পারে না, এমনকি উইকএন্ডও অন্তর্ভুক্ত করা যায়। তফসিলটি 2 বছর পর্যন্ত দীর্ঘ হতে পারে। সাধারণত এটি কয়েক সপ্তাহ দীর্ঘ হয়।
এখানে একটি শিডিয়ুলের একটি সাধারণ উদাহরণ যা উইকএন্ড বাদে দুই সপ্তাহ বিস্তৃত রয়েছে (নীচের স্ক্রিপ্টে আরও জটিল উদাহরণ রয়েছে):
+----+------------+------------+---------+--------+
| ID | ContractID | dt | dowChar | dowInt |
+----+------------+------------+---------+--------+
| 10 | 1 | 2016-05-02 | Mon | 2 |
| 11 | 1 | 2016-05-03 | Tue | 3 |
| 12 | 1 | 2016-05-04 | Wed | 4 |
| 13 | 1 | 2016-05-05 | Thu | 5 |
| 14 | 1 | 2016-05-06 | Fri | 6 |
| 15 | 1 | 2016-05-09 | Mon | 2 |
| 16 | 1 | 2016-05-10 | Tue | 3 |
| 17 | 1 | 2016-05-11 | Wed | 4 |
| 18 | 1 | 2016-05-12 | Thu | 5 |
| 19 | 1 | 2016-05-13 | Fri | 6 |
+----+------------+------------+---------+--------+
ID
স্বতন্ত্র, তবে এটি অবশ্যই ক্রমিক নয় (এটি প্রাথমিক কী)। তারিখগুলি প্রতিটি চুক্তির মধ্যে স্বতন্ত্র (এতে অনন্য সূচক থাকে (ContractID, dt)
)।
দ্বিতীয় সিস্টেমটি সময়সূচির অংশ হিসাবে সপ্তাহের দিনের তালিকার অন্তর হিসাবে সময়সূচী সংরক্ষণ করে। প্রতিটি বিরতি তার শুরু এবং শেষ তারিখগুলি (অন্তর্ভুক্ত) এবং সময়সূচির অন্তর্ভুক্ত সপ্তাহের দিনগুলির একটি তালিকা দ্বারা সংজ্ঞায়িত হয়। এই বিন্যাসে আপনি দক্ষতার সাথে সোম-বুড়ের মতো পুনরাবৃত্তিমূলক সাপ্তাহিক নিদর্শনগুলি সংজ্ঞায়িত করতে পারেন, তবে কোনও প্যাটার্নটি ব্যাহত হলে এটি ব্যথা হয়ে ওঠে, উদাহরণস্বরূপ প্রকাশ্য ছুটির দিন দ্বারা by
উপরের সাধারণ উদাহরণটি দেখতে কেমন হবে তা এখানে:
+------------+------------+------------+----------+----------------------+
| ContractID | StartDT | EndDT | DayCount | WeekDays |
+------------+------------+------------+----------+----------------------+
| 1 | 2016-05-02 | 2016-05-13 | 10 | Mon,Tue,Wed,Thu,Fri, |
+------------+------------+------------+----------+----------------------+
[StartDT;EndDT]
একই চুক্তিভুক্ত অন্তরগুলি ওভারল্যাপ করা উচিত নয়।
আমার প্রথম সিস্টেমের ডেটা দ্বিতীয় সিস্টেম দ্বারা ব্যবহৃত ফর্ম্যাটে রূপান্তর করা দরকার। এই মুহুর্তে আমি একক প্রদত্ত চুক্তির জন্য C # তে ক্লায়েন্টের পক্ষে এটি সমাধান করছি, তবে আমি সার্ভারের মধ্যে বাল্ক প্রসেসিং এবং রফতানি / আমদানির জন্য সার্ভার সাইডে টি-এসকিউএল এ এটি করতে চাই। সম্ভবত, এটি সিএলআর ইউডিএফ ব্যবহার করে করা যেতে পারে, তবে এই পর্যায়ে আমি এসকিউএলসিএলআর ব্যবহার করতে পারি না।
এখানে চ্যালেঞ্জ হ'ল অন্তরগুলির তালিকা যতটা সম্ভব সংক্ষিপ্ত এবং মানব-বান্ধব করে তোলা।
উদাহরণস্বরূপ, এই সময়সূচী:
+-----+------------+------------+---------+--------+
| ID | ContractID | dt | dowChar | dowInt |
+-----+------------+------------+---------+--------+
| 223 | 2 | 2016-05-05 | Thu | 5 |
| 224 | 2 | 2016-05-06 | Fri | 6 |
| 225 | 2 | 2016-05-09 | Mon | 2 |
| 226 | 2 | 2016-05-10 | Tue | 3 |
| 227 | 2 | 2016-05-11 | Wed | 4 |
| 228 | 2 | 2016-05-12 | Thu | 5 |
| 229 | 2 | 2016-05-13 | Fri | 6 |
| 230 | 2 | 2016-05-16 | Mon | 2 |
| 231 | 2 | 2016-05-17 | Tue | 3 |
+-----+------------+------------+---------+--------+
এটি হয়ে উঠতে হবে:
+------------+------------+------------+----------+----------------------+
| ContractID | StartDT | EndDT | DayCount | WeekDays |
+------------+------------+------------+----------+----------------------+
| 2 | 2016-05-05 | 2016-05-17 | 9 | Mon,Tue,Wed,Thu,Fri, |
+------------+------------+------------+----------+----------------------+
,এটা না:
+------------+------------+------------+----------+----------------------+
| ContractID | StartDT | EndDT | DayCount | WeekDays |
+------------+------------+------------+----------+----------------------+
| 2 | 2016-05-05 | 2016-05-06 | 2 | Thu,Fri, |
| 2 | 2016-05-09 | 2016-05-13 | 5 | Mon,Tue,Wed,Thu,Fri, |
| 2 | 2016-05-16 | 2016-05-17 | 2 | Mon,Tue, |
+------------+------------+------------+----------+----------------------+
আমি gaps-and-islands
এই সমস্যার জন্য একটি পদ্ধতির প্রয়োগ করার চেষ্টা করেছি । আমি দুটি পাসে এটি করার চেষ্টা করেছি। প্রথম পাসে আমি টানা সহজ দিনগুলির দ্বীপগুলি খুঁজে পাই, অর্থাৎ দ্বীপের শেষ দিনগুলির ক্রমের কোনও ফাঁক, সে সপ্তাহান্তে, পাবলিক ছুটি হোক বা অন্য কিছু হোক। যেমন প্রতিটি পাওয়া দ্বীপ জন্য আমি স্বতন্ত্র একটি কমা দিয়ে পৃথক করা তালিকা তৈরী WeekDays
। দ্বিতীয় পাসে আমি গ্রুপটি সপ্তাহের সংখ্যার ক্রমের ফাঁক বা the এর পরিবর্তনের দিকে তাকিয়ে আরও দ্বীপপুঞ্জ খুঁজে পেয়েছি WeekDays
।
এই পদ্ধতির সাথে প্রতিটি আংশিক সপ্তাহে উপরে বর্ণিত একটি অতিরিক্ত বিরতি হিসাবে শেষ হয়, কারণ সপ্তাহের সংখ্যাটি ক্রমাগত হলেও WeekDays
পরিবর্তন। এছাড়াও, এক সপ্তাহের মধ্যে নিয়মিত ফাঁক থাকতে পারে ( ContractID=3
নমুনা ডেটা দেখুন, যার জন্য কেবল ডেটা রয়েছে Mon,Wed,Fri,
) এবং এই পদ্ধতিটি এই জাতীয় সময়সূচীতে প্রতিটি দিনের জন্য আলাদা ব্যবধান তৈরি করতে পারে। উজ্জ্বল দিকে, সময়সূচীর কোনও ফাঁক না থাকলে এটি একটি ব্যবধান উত্পন্ন করে ( ContractID=7
সপ্তাহান্তে অন্তর্ভুক্ত নমুনা ডেটাতে দেখুন) এবং সেই ক্ষেত্রে শুরু বা শেষ সপ্তাহটি আংশিক কিনা তা বিবেচ্য নয়।
আমি কী করছি তার আরও ভাল ধারণা পেতে দয়া করে নীচের স্ক্রিপ্টে অন্যান্য উদাহরণ দেখুন। আপনি দেখতে পারেন যে প্রায়শই সাপ্তাহিক ছুটির দিনগুলি বাদ থাকে তবে সপ্তাহের অন্য কোনও দিনও বাদ যায়। উদাহরণস্বরূপ কেবল 3 Mon
, Wed
এবং Fri
তফসিলের অংশ। এছাড়াও, সপ্তাহান্তে অন্তর্ভুক্ত করা যেতে পারে, উদাহরণস্বরূপ 7.. সমাধানটি সপ্তাহের সমস্ত দিনকে সমানভাবে বিবেচনা করা উচিত। সপ্তাহের যে কোনও দিন সময়সূচী থেকে অন্তর্ভুক্ত বা বাদ দেওয়া যেতে পারে।
অন্তর্ভুক্ত উত্পন্ন তালিকা প্রদত্ত সময়সূচী সঠিকভাবে বর্ণনা করে তা যাচাই করতে আপনি নিম্নলিখিত সিউডো কোডটি ব্যবহার করতে পারেন:
- সমস্ত অন্তর মাধ্যমে লুপ
- শুরু এবং শেষের তারিখগুলির মধ্যে (অন্তর্ভুক্ত) মধ্যবর্তী সমস্ত ক্যালেন্ডারের তারিখগুলির মধ্যবর্তী প্রতিটি ব্যবধান লুপের জন্য।
- প্রতিটি তারিখের জন্য সপ্তাহের দিনটি তালিকাভুক্ত রয়েছে কিনা তা পরীক্ষা করে দেখুন
WeekDays
। যদি হ্যাঁ, তবে এই তারিখটি তফসিলের অন্তর্ভুক্ত।
আশা করা যায়, কোন ক্ষেত্রে নতুন অন্তর তৈরি করা উচিত তা এ বিষয়টি স্পষ্ট করে। উদাহরণস্বরূপ 4 এবং 5 এক সোমবার ( 2016-05-09
) তফসিলের মাঝামাঝি থেকে সরানো হয় এবং এই জাতীয় সময়সূচী একটি একক বিরতি দ্বারা প্রতিনিধিত্ব করা যায় না। উদাহরণস্বরূপ 6 সময়সূচীতে একটি দীর্ঘ ব্যবধান রয়েছে, সুতরাং দুটি বিরতি প্রয়োজন।
ব্যবধানগুলি সময়সূচীতে সাপ্তাহিক নিদর্শনগুলি উপস্থাপন করে এবং যখন কোনও প্যাটার্নটি ব্যাহত / পরিবর্তিত হয় তখন নতুন বিরতি যুক্ত করতে হয়। উদাহরণস্বরূপ 11 প্রথম তিন সপ্তাহের একটি প্যাটার্ন থাকে Tue
, তারপরে এই প্যাটার্নটি পরিবর্তিত হয় Thu
। ফলস্বরূপ এ জাতীয় সময়সূচি বর্ণনা করতে আমাদের দুটি অন্তর প্রয়োজন।
আমি এই মুহূর্তে এসকিউএল সার্ভার 2008 ব্যবহার করছি, সুতরাং সমাধানটি এই সংস্করণে কাজ করা উচিত। যদি এসকিউএল সার্ভার ২০০৮ এর কোনও সমাধানটি পরবর্তী সংস্করণগুলির বৈশিষ্ট্যগুলি ব্যবহার করে সরল / উন্নত করা যায় তবে এটি একটি বোনাস, দয়া করে এটিও দেখান।
আমার কাছে একটি Calendar
সারণী (তারিখের তালিকা) এবং Numbers
টেবিল (1 থেকে শুরু হওয়া পূর্ণসংখ্যার তালিকা) রয়েছে, সুতরাং প্রয়োজনে সেগুলি ব্যবহার করা ঠিক আছে। অস্থায়ী সারণীগুলি তৈরি করা এবং বেশ কয়েকটি প্রশ্ন রয়েছে যা বেশ কয়েকটি পর্যায়ে ডেটা প্রক্রিয়া করে। একটি অ্যালগরিদম পর্যায়ে সংখ্যা ঠিক করতে হবে, কার্সার এবং সুস্পষ্ট WHILE
লুপগুলি ঠিক নেই।
নমুনা ডেটা এবং প্রত্যাশিত ফলাফলের জন্য স্ক্রিপ্ট
-- @Src is sample data
-- @Dst is expected result
DECLARE @Src TABLE (ID int PRIMARY KEY, ContractID int, dt date, dowChar char(3), dowInt int);
INSERT INTO @Src (ID, ContractID, dt, dowChar, dowInt) VALUES
-- simple two weeks (without weekend)
(110, 1, '2016-05-02', 'Mon', 2),
(111, 1, '2016-05-03', 'Tue', 3),
(112, 1, '2016-05-04', 'Wed', 4),
(113, 1, '2016-05-05', 'Thu', 5),
(114, 1, '2016-05-06', 'Fri', 6),
(115, 1, '2016-05-09', 'Mon', 2),
(116, 1, '2016-05-10', 'Tue', 3),
(117, 1, '2016-05-11', 'Wed', 4),
(118, 1, '2016-05-12', 'Thu', 5),
(119, 1, '2016-05-13', 'Fri', 6),
-- a partial end of the week, the whole week, partial start of the week (without weekends)
(223, 2, '2016-05-05', 'Thu', 5),
(224, 2, '2016-05-06', 'Fri', 6),
(225, 2, '2016-05-09', 'Mon', 2),
(226, 2, '2016-05-10', 'Tue', 3),
(227, 2, '2016-05-11', 'Wed', 4),
(228, 2, '2016-05-12', 'Thu', 5),
(229, 2, '2016-05-13', 'Fri', 6),
(230, 2, '2016-05-16', 'Mon', 2),
(231, 2, '2016-05-17', 'Tue', 3),
-- only Mon, Wed, Fri are included across two weeks plus partial third week
(310, 3, '2016-05-02', 'Mon', 2),
(311, 3, '2016-05-04', 'Wed', 4),
(314, 3, '2016-05-06', 'Fri', 6),
(315, 3, '2016-05-09', 'Mon', 2),
(317, 3, '2016-05-11', 'Wed', 4),
(319, 3, '2016-05-13', 'Fri', 6),
(330, 3, '2016-05-16', 'Mon', 2),
-- a whole week (without weekend), in the second week Mon is not included
(410, 4, '2016-05-02', 'Mon', 2),
(411, 4, '2016-05-03', 'Tue', 3),
(412, 4, '2016-05-04', 'Wed', 4),
(413, 4, '2016-05-05', 'Thu', 5),
(414, 4, '2016-05-06', 'Fri', 6),
(416, 4, '2016-05-10', 'Tue', 3),
(417, 4, '2016-05-11', 'Wed', 4),
(418, 4, '2016-05-12', 'Thu', 5),
(419, 4, '2016-05-13', 'Fri', 6),
-- three weeks, but without Mon in the second week (no weekends)
(510, 5, '2016-05-02', 'Mon', 2),
(511, 5, '2016-05-03', 'Tue', 3),
(512, 5, '2016-05-04', 'Wed', 4),
(513, 5, '2016-05-05', 'Thu', 5),
(514, 5, '2016-05-06', 'Fri', 6),
(516, 5, '2016-05-10', 'Tue', 3),
(517, 5, '2016-05-11', 'Wed', 4),
(518, 5, '2016-05-12', 'Thu', 5),
(519, 5, '2016-05-13', 'Fri', 6),
(520, 5, '2016-05-16', 'Mon', 2),
(521, 5, '2016-05-17', 'Tue', 3),
(522, 5, '2016-05-18', 'Wed', 4),
(523, 5, '2016-05-19', 'Thu', 5),
(524, 5, '2016-05-20', 'Fri', 6),
-- long gap between two intervals
(623, 6, '2016-05-05', 'Thu', 5),
(624, 6, '2016-05-06', 'Fri', 6),
(625, 6, '2016-05-09', 'Mon', 2),
(626, 6, '2016-05-10', 'Tue', 3),
(627, 6, '2016-05-11', 'Wed', 4),
(628, 6, '2016-05-12', 'Thu', 5),
(629, 6, '2016-05-13', 'Fri', 6),
(630, 6, '2016-05-16', 'Mon', 2),
(631, 6, '2016-05-17', 'Tue', 3),
(645, 6, '2016-06-06', 'Mon', 2),
(646, 6, '2016-06-07', 'Tue', 3),
(647, 6, '2016-06-08', 'Wed', 4),
(648, 6, '2016-06-09', 'Thu', 5),
(649, 6, '2016-06-10', 'Fri', 6),
(655, 6, '2016-06-13', 'Mon', 2),
(656, 6, '2016-06-14', 'Tue', 3),
(657, 6, '2016-06-15', 'Wed', 4),
(658, 6, '2016-06-16', 'Thu', 5),
(659, 6, '2016-06-17', 'Fri', 6),
-- two weeks, no gaps between days at all, even weekends are included
(710, 7, '2016-05-02', 'Mon', 2),
(711, 7, '2016-05-03', 'Tue', 3),
(712, 7, '2016-05-04', 'Wed', 4),
(713, 7, '2016-05-05', 'Thu', 5),
(714, 7, '2016-05-06', 'Fri', 6),
(715, 7, '2016-05-07', 'Sat', 7),
(716, 7, '2016-05-08', 'Sun', 1),
(725, 7, '2016-05-09', 'Mon', 2),
(726, 7, '2016-05-10', 'Tue', 3),
(727, 7, '2016-05-11', 'Wed', 4),
(728, 7, '2016-05-12', 'Thu', 5),
(729, 7, '2016-05-13', 'Fri', 6),
-- no gaps between days at all, even weekends are included, with partial weeks
(805, 8, '2016-04-30', 'Sat', 7),
(806, 8, '2016-05-01', 'Sun', 1),
(810, 8, '2016-05-02', 'Mon', 2),
(811, 8, '2016-05-03', 'Tue', 3),
(812, 8, '2016-05-04', 'Wed', 4),
(813, 8, '2016-05-05', 'Thu', 5),
(814, 8, '2016-05-06', 'Fri', 6),
(815, 8, '2016-05-07', 'Sat', 7),
(816, 8, '2016-05-08', 'Sun', 1),
(825, 8, '2016-05-09', 'Mon', 2),
(826, 8, '2016-05-10', 'Tue', 3),
(827, 8, '2016-05-11', 'Wed', 4),
(828, 8, '2016-05-12', 'Thu', 5),
(829, 8, '2016-05-13', 'Fri', 6),
(830, 8, '2016-05-14', 'Sat', 7),
-- only Mon-Wed included, two weeks plus partial third week
(910, 9, '2016-05-02', 'Mon', 2),
(911, 9, '2016-05-03', 'Tue', 3),
(912, 9, '2016-05-04', 'Wed', 4),
(915, 9, '2016-05-09', 'Mon', 2),
(916, 9, '2016-05-10', 'Tue', 3),
(917, 9, '2016-05-11', 'Wed', 4),
(930, 9, '2016-05-16', 'Mon', 2),
(931, 9, '2016-05-17', 'Tue', 3),
-- only Thu-Sun included, three weeks
(1013,10,'2016-05-05', 'Thu', 5),
(1014,10,'2016-05-06', 'Fri', 6),
(1015,10,'2016-05-07', 'Sat', 7),
(1016,10,'2016-05-08', 'Sun', 1),
(1018,10,'2016-05-12', 'Thu', 5),
(1019,10,'2016-05-13', 'Fri', 6),
(1020,10,'2016-05-14', 'Sat', 7),
(1021,10,'2016-05-15', 'Sun', 1),
(1023,10,'2016-05-19', 'Thu', 5),
(1024,10,'2016-05-20', 'Fri', 6),
(1025,10,'2016-05-21', 'Sat', 7),
(1026,10,'2016-05-22', 'Sun', 1),
-- only Tue for first three weeks, then only Thu for the next three weeks
(1111,11,'2016-05-03', 'Tue', 3),
(1116,11,'2016-05-10', 'Tue', 3),
(1131,11,'2016-05-17', 'Tue', 3),
(1123,11,'2016-05-19', 'Thu', 5),
(1124,11,'2016-05-26', 'Thu', 5),
(1125,11,'2016-06-02', 'Thu', 5),
-- one week, then one week gap, then one week
(1210,12,'2016-05-02', 'Mon', 2),
(1211,12,'2016-05-03', 'Tue', 3),
(1212,12,'2016-05-04', 'Wed', 4),
(1213,12,'2016-05-05', 'Thu', 5),
(1214,12,'2016-05-06', 'Fri', 6),
(1215,12,'2016-05-16', 'Mon', 2),
(1216,12,'2016-05-17', 'Tue', 3),
(1217,12,'2016-05-18', 'Wed', 4),
(1218,12,'2016-05-19', 'Thu', 5),
(1219,12,'2016-05-20', 'Fri', 6);
SELECT ID, ContractID, dt, dowChar, dowInt
FROM @Src
ORDER BY ContractID, dt;
DECLARE @Dst TABLE (ContractID int, StartDT date, EndDT date, DayCount int, WeekDays varchar(255));
INSERT INTO @Dst (ContractID, StartDT, EndDT, DayCount, WeekDays) VALUES
(1, '2016-05-02', '2016-05-13', 10, 'Mon,Tue,Wed,Thu,Fri,'),
(2, '2016-05-05', '2016-05-17', 9, 'Mon,Tue,Wed,Thu,Fri,'),
(3, '2016-05-02', '2016-05-16', 7, 'Mon,Wed,Fri,'),
(4, '2016-05-02', '2016-05-06', 5, 'Mon,Tue,Wed,Thu,Fri,'),
(4, '2016-05-10', '2016-05-13', 4, 'Tue,Wed,Thu,Fri,'),
(5, '2016-05-02', '2016-05-06', 5, 'Mon,Tue,Wed,Thu,Fri,'),
(5, '2016-05-10', '2016-05-20', 9, 'Mon,Tue,Wed,Thu,Fri,'),
(6, '2016-05-05', '2016-05-17', 9, 'Mon,Tue,Wed,Thu,Fri,'),
(6, '2016-06-06', '2016-06-17', 10, 'Mon,Tue,Wed,Thu,Fri,'),
(7, '2016-05-02', '2016-05-13', 12, 'Sun,Mon,Tue,Wed,Thu,Fri,Sat,'),
(8, '2016-04-30', '2016-05-14', 15, 'Sun,Mon,Tue,Wed,Thu,Fri,Sat,'),
(9, '2016-05-02', '2016-05-17', 8, 'Mon,Tue,Wed,'),
(10,'2016-05-05', '2016-05-22', 12, 'Sun,Thu,Fri,Sat,'),
(11,'2016-05-03', '2016-05-17', 3, 'Tue,'),
(11,'2016-05-19', '2016-06-02', 3, 'Thu,'),
(12,'2016-05-02', '2016-05-06', 5, 'Mon,Tue,Wed,Thu,Fri,'),
(12,'2016-05-16', '2016-05-20', 5, 'Mon,Tue,Wed,Thu,Fri,');
SELECT ContractID, StartDT, EndDT, DayCount, WeekDays
FROM @Dst
ORDER BY ContractID, StartDT;
উত্তরের তুলনা
বাস্তব টেবিল @Src
রয়েছে 403,555
সঙ্গে সারি 15,857
স্বতন্ত্র ContractIDs
। সমস্ত উত্তর সঠিক ফলাফল দেয় (কমপক্ষে আমার ডেটার জন্য) এবং এগুলির সমস্ত যুক্তিসঙ্গত দ্রুত, তবে তারা অনুকূলতার মধ্যে পৃথক। কম বিরতি উত্পন্ন, তত ভাল। আমি কৌতূহল জন্য রান সময় অন্তর্ভুক্ত। মূল ফোকাসটি সঠিক এবং সর্বোত্তম ফলাফল, গতি নয় (যদি এটি খুব বেশি সময় না নেয় - আমি 10 মিনিটের পরে জিগি ক্রুয়েল্টিফ্রি জাইটিজিস্টার দ্বারা পুনঃবিবেচনাযোগ্য জিজ্ঞাসাটি বন্ধ করে দিয়েছি)।
+--------------------------------------------------------+-----------+---------+
| Answer | Intervals | Seconds |
+--------------------------------------------------------+-----------+---------+
| Ziggy Crueltyfree Zeitgeister | 25751 | 7.88 |
| While loop | | |
| | | |
| Ziggy Crueltyfree Zeitgeister | 25751 | 8.27 |
| Recursive | | |
| | | |
| Michael Green | 25751 | 22.63 |
| Recursive | | |
| | | |
| Geoff Patterson | 26670 | 4.79 |
| Weekly gaps-and-islands with merging of partial weeks | | |
| | | |
| Vladimir Baranov | 34560 | 4.03 |
| Daily, then weekly gaps-and-islands | | |
| | | |
| Mikael Eriksson | 35840 | 0.65 |
| Weekly gaps-and-islands | | |
+--------------------------------------------------------+-----------+---------+
| Vladimir Baranov | 25751 | 121.51 |
| Cursor | | |
+--------------------------------------------------------+-----------+---------+
@Dst
) থাকতে হবে। তফসিলের প্রথম দুই সপ্তাহের কেবলমাত্র Tue
তাই আপনি WeekDays=Tue,Thu,
এই সপ্তাহগুলির জন্য থাকতে পারবেন না । তফসিলের শেষ দুই সপ্তাহের মধ্যে কেবলমাত্র Thu
তাই আপনি WeekDays=Tue,Thu,
এই সপ্তাহগুলির জন্য আর থাকতে পারবেন না । এর জন্য উপ-অনুকূল সমাধানটি তিনটি সারি হবে: কেবল Tue
প্রথম দুই সপ্তাহের Tue,Thu,
জন্য, তৃতীয় সপ্তাহে উভয়ই রয়েছে Tue
এবং Thu
তারপরে কেবল Thu
শেষ দুই সপ্তাহের জন্য।
ContractID
পরিবর্তন হয়, অন্তর নির্ধারিত দিনের তালিকায় কোনও ফাঁক থাকলে। দিনের বাইরে গিয়ে নতুন সপ্তাহের দিনটি আগে দেখা যায়নি।
(11,'2016-05-03', '2016-05-17', 3, 'Tue,'), (11,'2016-05-19', '2016-06-02', 3, 'Thu,');
@ ডিস্টে এক সারি থাকা উচিত নয়Tue, Thu,
?