我需要编写一个查询,选择每天(30,60,90,Nx30)前创建的定期订单列表。如果没有必要,我不想使用游标。我们的目标是能够运行一个查询,向我显示今天要开具的订单。
我意识到这段代码不起作用,但我认为它说明了我尝试做的事情:
declare @period int;
set @period = 30;
select @period = @period - @period, [id] from orders
where
datepart(year, StartedAt) = datepart(year, (dateadd(day, -@period, getutcdate())))
and datepart(month, StartedAt) = datepart(month, (dateadd(day, -@period, getutcdate())))
and datepart(day, StartedAt) = datepart(day, (dateadd(day, -@period, getutcdate())))
谢谢。
答案 0 :(得分:1)
如果我理解正确,您希望从orders
获取行,其中StartedAt
的天数是该期间的倍数。如果是这样,这应该做你想要的:
select o.*
from orders o
where datediff(day, StartedAt, getutcdate()) % @period = 0;
这会计算今天和StartedAt
之间的日期数,然后使用“mod”运算符来确定它是@period
的倍数。