0

我有一个从过去的锚定日期开始的滚动 4 周(28 天)日期模式。我需要知道最近的上一个模式开始日期相对于当前日期是多少。

例如:

锚定日期 = 2013 年 6 月 30 日星期一。如果今天的日期是 2013 年 8 月 7 日,那么我希望返回的日期是 2013 年 7 月 29 日。以前的模式开始日期是 6 月 30 日,7 月 29 日。下一个模式开始日期是 8 月 26 日,但那是之后今天的日期是 2013 年 8 月 7 日。

希望这是有道理的,谢谢

4

2 回答 2

1

虽然我不是 100% 确定我了解 7 月 29 日的来源,但如果您想检索距锚定日期 28 天最近的日期,一种方法是使用递归 CTE(尽管它可能会影响性能)。

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)
于 2013-08-07T03:28:54.153 回答
0

我觉得你的计算有点不对劲。6 月 30 日后 28 天,7 月 28 日和 8 月 25 日。无论如何,这是我的查询,它将返回 28/Jul,我相信这是正确的答案。

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

http://sqlfiddle.com/#!6/d41d8/6267

于 2013-08-07T03:37:28.713 回答