2013-08-29 88 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的最大系數。

相關問題