SQL Project Planning

  • + 73 comments

    A simple MySQL implementation without variables and only requiring DATEDIFF():

    SET sql_mode = '';
    SELECT Start_Date, End_Date
    FROM 
        (SELECT Start_Date FROM Projects WHERE Start_Date NOT IN (SELECT End_Date FROM Projects)) a,
        (SELECT End_Date FROM Projects WHERE End_Date NOT IN (SELECT Start_Date FROM Projects)) b 
    WHERE Start_Date < End_Date
    GROUP BY Start_Date 
    ORDER BY DATEDIFF(End_Date, Start_Date), Start_Date
    

    Edits: Updated with the sql_mode='' based on @jakab922's comment. HackerRank changed the default sql_mode behavior to only_full_group_by at some point after I posted this.

    Also, a full solution without the need to change modes was posted by @dougal_michael below, which uses the MIN() function instead.