Home Forums SQL Server 2008 T-SQL (SS2K8) How to get minimum date of an ID with respect to startdate? RE: How to get minimum date of an ID with respect to startdate?

  • Quick suggestion

    😎

    DECLARE @a TABLE (ID int, StartDate datetime)

    DECLARE @b-2 TABLE (ID int, StartDate datetime)

    INSERT INTO @b-2

    SELECT 1,GETDATE()-5 UNION ALL

    SELECT 1,GETDATE()-7 UNION ALL

    SELECT 2,GETDATE()-8 UNION ALL

    SELECT 3,GETDATE()-10 UNION ALL

    SELECT 4,GETDATE()- 12 UNION ALL

    SELECT 4,GETDATE()-13 UNION ALL

    SELECT 5,GETDATE()-6 UNION ALL

    SELECT 6,GETDATE()-7

    INSERT INTO @a

    SELECT 1,GETDATE()-4 UNION ALL

    SELECT 1,GETDATE()-6 UNION ALL

    SELECT 2,GETDATE()-7 UNION ALL

    SELECT 3,GETDATE()-9 UNION ALL

    SELECT 4,GETDATE()-12 UNION ALL

    SELECT 4,GETDATE()-12 UNION ALL

    SELECT 5,GETDATE()-6 UNION ALL

    SELECT 6,GETDATE()-7

    SELECT

    A.ID

    ,A.StartDate

    ,B.StartDate

    FROM @a A

    INNER JOIN @b-2 B

    ON A.ID = B.ID

    ;WITH BASE_DATA AS

    (

    SELECT

    ROW_NUMBER() OVER

    (

    ORDER BY A.ID

    ,A.StartDate

    ) AS A_RID

    ,A.ID

    ,A.StartDate

    FROM @a A

    )

    SELECT

    A.ID

    ,A.StartDate

    ,MIN(B.StartDate) AS NextMininmumDateFromTable@B

    FROM BASE_DATA A

    INNER JOIN @b-2 B

    ON A.ID = B.ID

    WHERE B.StartDate <= A.StartDate

    GROUP BY A.ID

    ,A.A_RID

    ,A.StartDate;

    Output

    ID StartDate NextMininmumDateFromTable@B

    ----------- ----------------------- ---------------------------

    1 2016-02-02 10:16:36.703 2016-02-01 10:16:36.703

    1 2016-02-04 10:16:36.703 2016-02-01 10:16:36.703

    2 2016-02-01 10:16:36.703 2016-01-31 10:16:36.703

    3 2016-01-30 10:16:36.703 2016-01-29 10:16:36.703

    4 2016-01-27 10:16:36.703 2016-01-26 10:16:36.703

    4 2016-01-27 10:16:36.703 2016-01-26 10:16:36.703

    5 2016-02-02 10:16:36.703 2016-02-02 10:16:36.703

    6 2016-02-01 10:16:36.703 2016-02-01 10:16:36.703