2013-01-04 55 views
0

這是MyTable的結構與表中的比較值在SQL

MyTable : ID, Date 

Select ID, Date from MyTable 

ID  Date 

50 2013-01-01 00:00:00.000 
51 2013-01-02 00:00:00.000 
52 2013-01-02 00:00:00.000 

我需要得到這樣的結果。

ID  Date 

50 2013-01-01 00:00:00.000 
50 2013-01-02 00:00:00.000 
50 2013-01-03 00:00:00.000 

51 2013-01-02 00:00:00.000 
51 2013-01-03 00:00:00.000 

52 2013-01-03 00:00:00.000 

我如何得到結果?

+2

爲什麼'50'有3個日期,'51'有2個和'52'有一個?那最後的日期從哪裏來? – Oded

+0

我需要添加額外的行ID和即將到來的日期。 – Siddharth

+0

我的問題不是關於你需要添加什麼,而是什麼邏輯決定它。沒有更多的信息,這是沒有意義的。 – Oded

回答

4

好像你想得到一個日期列表。如此,那麼你可以使用遞歸CTE獲得的日期列表:

;with data(id, date) as 
(
    select id, date 
    from mytable 
    union all 
    select id, dateadd(day, 1, date) 
    from data 
    where dateadd(day, 1, date) <= '1/3/2013' 
) 
select * 
from data 
order by id 

SQL Fiddle with Demo。這將生成表中當前日期和您提供的結束日期之間每個ID的日期列表。在我的例子中,它是1/3/2013

+0

謝謝。這是工作 – Siddharth

+0

好的解決方案bluefeet! +1 – MarkD

0

我認爲這將工作得更快一點,只要ID列上有一個CLUSTERED INDEX,否則bluefeet的解決方案太棒了!

SELECT T1.ID 
     ,Date = DATEADD(DAY, -ROW_NUMBER() OVER (PARTITION BY T1.ID ORDER BY (SELECT NULL))+1, '2013-01-03') 
FROM MyTable T1 
JOIN MyTable T2 ON T1.ID <= T2.ID