我正在创建一份报告,报告上周,每周,每季度和每周的收入详情,所有这些都基于前一周的截止date
。
假设报告将始终在星期五运行,计算/截止日期如下:
08-12-2016
07-30-2016
直到08-05-2016
08-01-2016
直到08-05-2016
08-05-2016
现在假设如果我在星期三08-03-2016
运行此报告,那么它应该使用当前的星期结束时间为08-05-2015,然后再返回一周。在这种情况下,截止日期为08-23-2016
,直到08-29-2016
。
我该怎么做?
答案 0 :(得分:1)
上周五有两种方法可以解决,一种方法使用DATEFIRST
,另一方面使用巧合,第0天是星期一。
将DATEFIRST
设置为6(星期六),然后计算出工作日的上一个结束日期:
SET DATEFIRST 6
SELECT CAST(DATEADD(DAY, -DATEPART(WEEKDAY, GETDATE()), GETDATE()) AS DATE) 'Last Friday';
或者找到最近一周的开始(星期一)并倒数三天:
SELECT CAST(DATEADD(DAY, -3 , DATEADD(WEEK,DATEDIFF(WEEK,0,GETDATE()),0)) AS DATE) 'Last Friday'
我更喜欢前者,但由于您明确地期待星期五,而不是特定于某一天的特定区域结束,所以您对后者感到满意。
其余的插入标准的第一个/最后DATEADD/DATEDIFF
模式。这些应该为您提供您正在寻找的东西:
DECLARE @LastFriday DATE = DATEADD(DAY, -3 , DATEADD(WEEK,DATEDIFF(WEEK,0,GETDATE()),0));
SELECT
LastFriday = @LastFriday,
PriorWeekStart = DATEADD(DAY, -6, @LastFriday),
MonthStart = CAST(DATEADD(MONTH, DATEDIFF(MONTH, 0, @LastFriday), 0) AS DATE),
QuarterStart = CAST(DATEADD(QUARTER, DATEDIFF(QUARTER, 0, @LastFriday), 0) AS DATE)
LastFriday PriorWeekStart MonthStart QuarterStart
---------- -------------- ---------- ------------
2016-07-29 2016-07-23 2016-07-01 2016-07-01