查找最近的周期性事件日期

时间:2018-04-05 16:30:05

标签: sql algorithm

我们假设有些活动于2000年1月1日开始,每36小时45分钟重复一次。

此时在我的地方,它是2018年4月4日18:30。

我怎样才能在SQL中计算

  • 我的活动最近一次发生的日期和时间

  • 我的活动下一次发生的日期和时间?

我的第一个想法是将我的句号循环添加到开始日期,直到达到所需的日期,但是对于更长的时间跨度,这将是非常无效的,我相信

感谢您的帮助。

2 个答案:

答案 0 :(得分:0)

我们可以用这个整数数学的结果来参数化一个sql语句......

int now = current time in minutes after 1 Jan, 2000
int period = 36 * 60 + 45
int eventsBeforeNow = now / period  /* where '/' is a truncating, integer divide */
int lastEventTime = eventsBeforeNow * period
int nextEventTime = lastEventTime + period

答案 1 :(得分:0)

好的,我自己找到了答案。似乎工作

declare @minutes int,@n int,@period int
SET @period=36*60+45
select @minutes=datediff(minute,'2000-01-01 00:00:00','2018-04-04 18:30:00')
set @n=@minutes/@period 

select DATEADD(minute,@n*@period,'2000-01-01 00:00:00')
select DATEADD(minute,(@n+1)*@period,'2000-01-01 00:00:00')

我的示例活动的近期时间是2018-04-04 14:15:00.000

我的示例活动的下一次是2018-04-06 03:00:00.000