לבנק אוצר החייל קיימים 3 סניפים ברחבי העיר ירוחם, כאשר בכל סניף קיימים 2 כספומטים. נתונה הטבלה הבאה אשר מתארת את פרקי הזמן בהם הכספומטים השונים עבדו.
בבנק מס’ 1 ניתן לראות כי הכספומטים עבדו באופן רציף מ 08:30 בבוקר עד 09:55
בבנק מס’ 2 ניתן לראות כי מ 09:20 ועד 09:25 הכספומטים עבדו באופן רציף, לאחר מכן היתה הפסקה, ואז המשך עבודתן הרציפה היתה מ 09:30 ועד 09:55, שוב היתה הפסקה ואז המשך עבודתן הרציפה היתה מ 10:30 ועד 11:55.
בבנק מס’ 3 ניתן לראות כי הכספומטים עבדו באופן רציף מ 08:00 ועד 09:50, לאחר מכן היתה הפסקה, ואז המשך עבודתן הרציפה היתה מ 11:20 ועד 12:15
CREATE TABLE time_table (bank_id int, atm_id int, strt_date datetime, end_date datetime)
כתבו שאילתה אשר מחזירה את פרקי הזמן הרציפים בהם עבדו הכספומטים בבנקים השונים. לבנק מס’ 1 השאילתא אמורה להחזיר שורה אחת – 08:30-09:55, לבנק מס’ 2 שלוש שורות – 09:20-09:25, 09:30-09:55, 10:30-11:55 ולבנק מס’ 3 שתי שורות – 08:00-09:50 ו – 11:20-12:50.
CREATE TABLE time_table (bank_id int, atm_id int, strt_date datetime, end_date datetime) INSERT INTO time_table VALUES (1, 1, '2015/04/12 08:30' , '2015/04/12 09:15') INSERT INTO time_table VALUES (1, 2, '2015/04/12 09:00' , '2015/04/12 09:45') INSERT INTO time_table VALUES (1, 1, '2015/04/12 09:20' , '2015/04/12 09:55') INSERT INTO time_table VALUES (2, 1, '2015/04/12 09:20' , '2015/04/12 09:25') INSERT INTO time_table VALUES (2, 2, '2015/04/12 09:30' , '2015/04/12 09:55') INSERT INTO time_table VALUES (2, 1, '2015/04/12 10:30' , '2015/04/12 11:30') INSERT INTO time_table VALUES (2, 2, '2015/04/12 11:15' , '2015/04/12 11:55') INSERT INTO time_table VALUES (3, 1, '2015/04/12 08:00' , '2015/04/12 09:00') INSERT INTO time_table VALUES (3, 2, '2015/04/12 08:55' , '2015/04/12 09:20') INSERT INTO time_table VALUES (3, 1, '2015/04/12 09:15' , '2015/04/12 09:50') INSERT INTO time_table VALUES (3, 1, '2015/04/12 11:20' , '2015/04/12 12:15')
-- part 1, create a view to identify the contiguousy CREATE VIEW contiguous_vu AS SELECT bank_id, strt_date, ISNULL(end_date, '9999-12-31') end_date, CASE WHEN strt_date > MAX(ISNULL(end_date, '9999-12-31')) over(PARTITION BY bank_id ORDER BY strt_date ROWS BETWEEN UNBOUNDED PRECEDING AND 1 preceding) THEN 1 END contiguous_identifier FROM time_table -- part 2, group the different parts SELECT bank_id, MIN(strt_date), MAX(end_date) FROM ( SELECT bank_id, strt_date, end_date, contiguous_identifier , SUM(contiguous_identifier) over(PARTITION BY bank_id ORDER BY strt_date) contiguousy FROM contiguous_vu ) TAB GROUP BY bank_id, contiguousy ORDER BY 1, 2