You are viewing a single comment's thread. Return to all comments →
This is MySQL version how this can be done
SELECT T1.Start_Date, T2.End_Date FROM ( SELECT ROW_NUMBER() OVER (ORDER BY Start_Date ASC) AS r, Start_Date FROM Projects WHERE (Start_Date NOT IN (SELECT End_Date FROM Projects)) ) AS T1 LEFT JOIN (SELECT ROW_NUMBER() OVER (ORDER BY End_Date ASC) AS r, End_Date FROM Projects WHERE (End_Date NOT IN (SELECT Start_Date FROM Projects)) ) AS T2 ON T1.r=T2.r ORDER BY DATEDIFF(T2.End_Date, T1.Start_Date) ASC, T1.Start_Date ASC
This is explanation
-- Select the unmatched Start_Date and End_Date pairs SELECT T1.Start_Date, -- Start date of a project (not matched to any end date) T2.End_Date -- End date of a project (not matched to any start date) FROM ( -- Subquery T1: Get all Start_Dates that are not listed as End_Dates SELECT ROW_NUMBER() OVER (ORDER BY Start_Date ASC) AS r, -- Assign a row number for matching Start_Date FROM Projects WHERE Start_Date NOT IN (SELECT End_Date FROM Projects) -- Filter: unmatched start dates ) AS T1 -- LEFT JOIN to match each unmatched Start_Date with an unmatched End_Date LEFT JOIN ( -- Subquery T2: Get all End_Dates that are not listed as Start_Dates SELECT ROW_NUMBER() OVER (ORDER BY End_Date ASC) AS r, -- Assign a row number for matching End_Date FROM Projects WHERE End_Date NOT IN (SELECT Start_Date FROM Projects) -- Filter: unmatched end dates ) AS T2 ON T1.r = T2.r -- Join rows by row number (to pair start and end dates in order) -- Order results by shortest duration first, then by Start_Date ORDER BY DATEDIFF(T2.End_Date, T1.Start_Date) ASC, -- Sort by number of days between Start and End T1.Start_Date ASC;
Seems like cookies are disabled on this browser, please enable them to open this website
SQL Project Planning
You are viewing a single comment's thread. Return to all comments →
This is MySQL version how this can be done
This is explanation