我從過去的錨定日期開始滾動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