0

这是 MyTable 结构

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 

我如何得到结果?

4

2 回答 2

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

于 2013-01-04T13:37:35.213 回答
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
于 2013-01-04T14:52:03.063 回答