У меня есть таблица с данными примерно так:
ID StartDate EndDate EffectiveDate
-- --------- ------- -------------
1 1/1/2009 12/31/2009 12/31/2009
1 7/1/2009 12/31/2009 7/1/2009
1 8/1/2009 12/31/2009 8/1/2009
2 1/1/2010 12/31/2010 12/31/2010
2 3/1/2010 12/31/2010 12/31/2010
Мне нужен запрос, который отформатирует его так:
ID StartDate EndDate EffectiveDate
-- --------- ------- -------------
1 1/1/2009 6/30/2009 null
1 7/1/2009 7/31/2009 7/1/2009
1 8/1/2009 12/31/2009 8/1/2009
2 1/1/2010 2/28/2010 null
2 3/1/2010 12/31/2010 12/31/2010
...
Это в основном похоже на временную шкалу с сегментированными «точками», и каждая точка - это новая StartDate с EndDate следующей точки и т. Д.
Я пытался использовать CTE, а также следующий запрос:
SELECT t1.RfqItemOptionId,
t1.StartDate,
MIN(t2.EffectiveDate) EndDate,
t1.EffectiveDate EffectiveDate
FROM @OptionPeriods t1
LEFT JOIN @OptionPeriods t2 ON t1.RfqItemOptionId = t2.RfqItemOptionId
AND t1.EffectiveDate < t2.EffectiveDate
GROUP BY t1.RfqItemOptionId, t1.StartDate, t1.EffectiveDate
Что близко ... но без сигары: (
Может кто-нибудь помочь?