• Lynn Pettis (8/22/2014)


    sku370870 (8/22/2014)


    Sean Lange (8/22/2014)


    sku370870 (8/22/2014)


    Lynn Pettis (8/22/2014)


    Sean Lange (8/22/2014)


    brad.mason5 (8/22/2014)


    Not sure if this is what you are looking for. This is assuming OrderID is the correct order you want.

    SELECT TaskID

    ,TaskDate

    ,OrderID

    ,TrueOrderID = ROW_NUMBER() OVER(ORDER BY TaskDate ASC)

    FROM #tblTasks

    ORDER BY OrderID

    Then you could compare the OrderID to TrueOrderID

    That works until a row is deleted or for some other reason you have a gap in OrderID.

    SELECT TaskID

    ,TaskDate

    ,OrderID

    ,OrderSeq = ROW_NUMBER() OVER (ORDER BY OrderID ASC)

    ,TrueOrderID = ROW_NUMBER() OVER(ORDER BY TaskDate ASC)

    FROM #tblTasks

    ORDER BY OrderID

    Now compare OrderSeq to TrueOrderID.

    Sorry, being a bit dense here. How do you compare OrderSeq to TrueOrderID? If I change the data to:

    INSERT INTO #tblTasks (TaskID, TaskDate, OrderID)

    SELECT 10, 'Jan 01 2014', 1 UNION ALL

    SELECT 11, 'Jan 06 2014', 2 UNION ALL

    SELECT 12, 'Jan 03 2014', 3 UNION ALL

    SELECT 13, 'Jan 16 2014', 4

    SELECT TaskID

    ,TaskDate

    ,OrderID

    ,OrderSeq = ROW_NUMBER() OVER (ORDER BY OrderID ASC)

    ,TrueOrderID = ROW_NUMBER() OVER(ORDER BY TaskDate ASC)

    FROM #tblTasks

    ORDER BY OrderID

    This returns:

    102014-01-01 00:00:00111

    112014-01-06 00:00:00223

    122014-01-03 00:00:00332

    132014-01-16 00:00:00444

    How can I determine that, in this group of records, there is at least one record (well, there will always be at least two) where OrderSeq <> TrueOrderID.

    Ding Ding!!! If there are any rows where OrderSeq <> TrueOrderID then they are not in order. If they had been in order there would be no rows in that condition. 😀

    Well, I did try

    SELECT TaskID

    ,TaskDate

    ,OrderID

    ,ROW_NUMBER() OVER (ORDER BY OrderID ASC) AS [OrderSeq]

    ,ROW_NUMBER() OVER(ORDER BY TaskDate ASC) AS [TrueOrderID]

    FROM #tblTasks

    WHERE OrderSeq <> TrueOrderID

    and it says that OrderSeq and TrueOrderID are invalid column names. So not sure how to reference them to find out if they are not equal. I also put a IF EXISTS() around the whole statement - so I could determine if the condition was met - and it reported that OrderBy could not be used in derived tables and a lot more.

    Try:

    WITH BaseData as (

    SELECT TaskID

    ,TaskDate

    ,OrderID

    ,ROW_NUMBER() OVER (ORDER BY OrderID ASC) AS [OrderSeq]

    ,ROW_NUMBER() OVER(ORDER BY TaskDate ASC) AS [TrueOrderID]

    FROM #tblTasks

    )

    SELECT * FROM BaseData

    WHERE OrderSeq <> TrueOrderID

    That's what I need. Thank you very much.