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