我从过去的锚定日期开始滚动4周(28天)的日期模式。我需要知道最近的模式开始日期是相对于当前日期。根据锚定日期的模式计算日期
例如:
锚日期=周一6月30日2013年如果今天的日期是2013年8月7日那我想返回的日期是7月29日2013年以前启动模式日期是6月30日,7月29日的下一模式起始日期是8月26日,但是这是8月7日2013年
希望今天的日期是有道理的,并感谢后
我从过去的锚定日期开始滚动4周(28天)的日期模式。我需要知道最近的模式开始日期是相对于当前日期。根据锚定日期的模式计算日期
例如:
锚日期=周一6月30日2013年如果今天的日期是2013年8月7日那我想返回的日期是7月29日2013年以前启动模式日期是6月30日,7月29日的下一模式起始日期是8月26日,但是这是8月7日2013年
希望今天的日期是有道理的,并感谢后
虽然我不是100%肯定我明白的地方7月29日来自,如果你想要从锚定日期起28天内检索最近的日期,一种方法是使用递归CTE(尽管它可能有一个perfor意义含义)。
declare @anchor datetime
set @anchor = '6/30/2013'
;with cte as (
select @anchor dt
union all
select dateadd(day, 28, dt) dt
from cte
where dt <= dateadd(day, -28, '8/7/2013')
)
select max(dt) from cte
或许更简单的解决办法是使用datediff
还有:
declare @anchor datetime
set @anchor = '6/30/2013'
select dateadd(day, 28 * (datediff(day, @anchor, getDate())/28), @anchor)
对不起,在发布基本相同的解决方案之前,我没有看到您的答案。我会+1你的答案,因为这是最早的答案。 –
我认为你的计算有点不合适。 28/7月30日之后的28天,然后是8月25日。 无论如何,这里是我的查询将返回28/7月,我相信这是正确的答案。
WITH my_date AS
(SELECT CAST('30/Jun/2013' AS DATETIME)AS the_date
UNION ALL
SELECT dateadd(day,28,the_date)AS the_date
FROM my_date
WHERE my_date.the_date <= dateadd(day,-28,getdate())
)
SELECT max(the_date)
FROM my_date
我有点困惑 - 如果锚定数据是6月30日,不应该下一个日期是7月28日(然后8月25日) - 惊变28天? – sgeddes