Home Forums SQL Server 2008 T-SQL (SS2K8) Avoiding cursor: Help with getting only first match after previous match RE: Avoiding cursor: Help with getting only first match after previous match

  • dwain.c (11/15/2012)


    I'm not getting exactly the desired results you posted but maybe this will give you a hint.

    ;WITH CTE AS (

    SELECT TOP 1 ID, TEXT1, aDate, TEXT2

    FROM #Table1

    JOIN #Table2 ON TEXT1 = TEXT2

    UNION ALL

    SELECT a.ID, a.TEXT1, b.aDate, b.TEXT2

    FROM #Table1 a

    JOIN CTE c ON a.ID = c.ID + 1

    JOIN #Table2 b ON a.TEXT1 = b.TEXT2 AND b.aDate >= c.aDate

    )

    SELECT TEXT1, aDate, TEXT2

    FROM (

    SELECT TEXT1, aDate, TEXT2

    ,n=ROW_NUMBER() OVER (PARTITION BY ID ORDER BY aDate)

    FROM CTE) a

    WHERE n = 1

    OPTION (MAXRECURSION 0)

    Where the code says AND b.aDate >= c.aDate, try making that AND b.aDate > c.aDate and run it both ways. I think this is close and that the answer may lie in reinterpreting the expected results from the sample data.

    Unfortunately this is probably going to be quite slow depending on the number of rows in your actual data.

    just by curiosity the last row of the result is not matched so i think adding an identity to the #table2 and using that will solve this issue may i right or we will need to work more

    Every rule in a world of bits and bytes, can be bend or eventually be broken
    MyBlog About Common dialog control
    A Visualizer for viewing SqlCommand object script [/url]