0

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

4

4 回答 4

2

找出表中 most_recent_date 和日期之间的差异,然后使用模函数,其中 n 是间隔。

SELECT date
FROM my_table
WHERE mod(most_recent_date - date, n) = 0
于 2018-08-22T22:03:13.420 回答
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 的最大系数。

于 2013-08-29T14:56:07.873 回答
0

您可以使用dateadd 函数并通过连接到 self 表进行选择。

你需要做什么 - 将结果插入临时表,附加列然后包含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
于 2013-08-29T14:47:56.287 回答
0
DECLARE @mostRecent datetime2

SELECT @mostRecent = MAX(dateColumn)
FROM table

SELECT columns
FROM table
WHERE (DATEDIFF(day, dateColumn, @mostRecent) % n) = 0
于 2013-08-29T14:54:13.663 回答