Home Forums SQL Server 2005 T-SQL (SS2K5) TSQL Return start/end price and start/end datetime by product name. RE: TSQL Return start/end price and start/end datetime by product name.

  • That works Mark, nice one. So does this:

    ;WITH OrderedData AS (

    SELECT Seq = ROW_NUMBER() OVER (ORDER BY [Name], [DateTime], Price),

    [Name], Price, [DateTime]

    FROM #Temp

    ),

    Calculator AS (

    SELECT fr.Seq, fr.[Name], fr.Price, fr.[DateTime],

    Band = CAST('1' AS INT)

    FROM OrderedData fr

    WHERE fr.Seq = 1

    UNION ALL

    SELECT tr.Seq, tr.[Name], tr.Price, tr.[DateTime],

    Band = CASE WHEN tr.[Name] <> lr.[Name] OR tr.Price <> lr.Price THEN Band+1 ELSE Band END

    FROM Calculator lr

    INNER JOIN OrderedData tr ON tr.Seq = lr.Seq+1

    )

    SELECT a.[Name], a.Price, a.StartDate, b.StartDate AS EndDate

    FROM (

    SELECT Band, [Name], Price, MIN([DateTime]) AS StartDate

    FROM Calculator

    GROUP BY Band, [Name], Price

    ) a

    LEFT JOIN (

    SELECT Band, [Name], Price, MIN([DateTime]) AS StartDate

    FROM Calculator

    GROUP BY Band, [Name], Price

    ) b ON b.[Name] = a.[Name] AND b.Band = a.Band + 1

    ORDER BY a.[Name], a.Price

    “Write the query the simplest way. If through testing it becomes clear that the performance is inadequate, consider alternative query forms.” - Gail Shaw

    For fast, accurate and documented assistance in answering your questions, please read this article.
    Understanding and using APPLY, (I) and (II) Paul White
    Hidden RBAR: Triangular Joins / The "Numbers" or "Tally" Table: What it is and how it replaces a loop Jeff Moden