• One way is to expand the dates with a number/tally table and then roll them up again:

    -- *** Consumable Test Data ***

    -- Please supply in future with dates in ISO format.

    CREATE TABLE #t

    (

    DateFrom date NOT NULL

    ,DateTo date NOT NULL

    ,Price money NOT NULL

    );

    INSERT INTO #t

    VALUES ('20130620', '20130826', 199.99)

    ,('20130827', '20140121', 199.99)

    ,('20131003', '20131031', 149.99)

    ,('20131102', '20131107', 149.99)

    ,('20131125', '20131126', 149.99)

    ,('20131127', '20131129', 140.00)

    ,('20131130', '20131205', 149.99)

    ,('20131206', '20131206', 140.00)

    ,('20131207', '20131225', 149.99)

    ,('20140114', '20140114', 119.99);

    -- *** End Test Data ***

    WITH Numbers(n)

    AS

    (

    -- 10000 rows

    SELECT ROW_NUMBER() OVER (ORDER BY (SELECT NULL))

    FROM (VALUES(0),(0),(0),(0),(0),(0),(0),(0),(0),(0)) a(n)

    CROSS JOIN (VALUES(0),(0),(0),(0),(0),(0),(0),(0),(0),(0)) b(n)

    CROSS JOIN (VALUES(0),(0),(0),(0),(0),(0),(0),(0),(0),(0)) c(n)

    CROSS JOIN (VALUES(0),(0),(0),(0),(0),(0),(0),(0),(0),(0)) d(n)

    )

    ,MinPrices

    AS

    (

    SELECT A.PriceDate, MIN(Price) AS Price

    FROM #t T

    JOIN Numbers N

    ON N.N <= DATEDIFF(day, T.DateFrom, T.DateTo) + 1

    CROSS APPLY (VALUES( DATEADD(day, N -1, T.DateFrom)) ) A(PriceDate)

    GROUP BY A.PriceDate

    )

    ,Grps

    AS

    (

    SELECT PriceDate, Price

    ,ROW_NUMBER() OVER (ORDER BY PriceDate)

    - ROW_NUMBER() OVER (PARTITION BY Price ORDER BY PriceDate) AS Grp

    FROM MinPrices

    )

    ,Results

    AS

    (

    SELECT MIN(PriceDate) AS DateFrom

    ,MAX(PriceDate) AS DateTo

    ,Price

    ,Grp

    FROM Grps

    GROUP BY Price, Grp

    )

    SELECT DateFrom, DateTo, Price

    FROM Results

    ORDER BY DateFrom;