2013-08-29 80 views
0

我有一列日期。他们都是工作日。我想生成一个相距“n”天的日期列表。例如,从最近的日期开始,我想在它之前的n天,它之前的2天前,它之前的3天等等找到日期。我可以使用while循环,但是我想知道是否可以使用SQL集操作。可以做到吗?T-SQL从日期列中选择每第n个日期

+1

您想如何使用它?目前还不清楚你实际想要做什么。 –

+1

你能提供样本数据吗?如果你的日期都是工作日,而且n = 5,那么你很快就没有日期在你的表中。 –

回答

0

您可以使用dateadd函数 并使用连接到自身表进行选择。

什么,你需要做的是 - 结果插入到临时表, 与其他列则包含row_number然后命令一样的结果

简单的例子:

declare @t1 table (d datetime, row int) 

insert @t1 
select d, row_number()over(order by d) 
from T1 
order by d 

select T1A.*, datediff(day,T1A.d,T1B.d) as dif 
from @t1 as T1A 
left join @t1 as T1B on T1A.row = T1B.row-1 
0
DECLARE @mostRecent datetime2 

SELECT @mostRecent = MAX(dateColumn) 
FROM table 

SELECT columns 
FROM table 
WHERE (DATEDIFF(day, dateColumn, @mostRecent) % n) = 0 
1

这是CTE的理想情况:

DECLARE @LastDate datetime; 
DECLARE @N int;  
DECLARE @NCoefficientMax; 

SELECT @N = 1, @NCoefficientMax = 10; 

SELECT @LastDate = MyDate 
FROM MyTable 
ORDER BY MyDate DESC 

WITH mycte 
AS 
(
SELECT DATEADD(dd, @N, @LastDate) AS NextDate, @N AS NCoefficient 
UNION ALL 
SELECT DATEADD(dd, @N, NextDate), @N + NCoefficient AS NCoefficient 
FROM mycte WHERE NCoefficient < @NCoefficientMax 
) 

SELECT NextDate FROM mycte 

其中@NCoefficientMax是N的最大系数。

相关问题