我实际上是SAS编码器,并试图弄清楚如何计算SQL上的日期差异。这是一个场景 - 我将在每个星期一,星期三和星期五执行相同的查询,它将查找在过去几天开立帐户的客户。从技术上讲,当我在星期一执行查询时,代码必须寻找在周五,周日和周日开立账户的客户,当我在周三执行时,代码必须寻找在星期一和星期二开通的客户,当我在星期五和星期四执行它必须寻找在星期三和星期四开设帐户的客户。请给我任何建议。我想自动化脚本,所以任何帮助都非常感谢。我目前正在使用SQL WorkBench将我的脚本从sas移动到SQL
答案 0 :(得分:0)
您真的只是在寻找过去两天或三天内创建的客户,具体取决于一周的日期,而不包括今天创建的客户:
SELECT * FROM customers
WHERE
createdate >=
CASE
WHEN DAYOFWEEK(CURDATE()) = 2 -- when Monday
THEN DATE_SUB(CURDATE(), interval 3 day) -- then today minus 3 days
ELSE DATE_SUB(CURDATE(), interval 2 day) -- else today minus two days
END
AND createdate < CURDATE()
答案 1 :(得分:0)
我会创建一个脚本,将变量保存为上次运行脚本的日期,以便可以在任何一天使用它。伪代码将放在[括号中],因为我不确定您的某些偏好或命名约定。
DECLARE @MyLastDate [Data Type for persisting date]
DECLARE @TodaysDate [Data Type for persisting date]
if @MyLastDate == null {
SET @MyLastDate = [Todays Date]
}
SELECT * FROM [myTableName]
WHERE customerOpenDate BETWEEN '@MyLastDate' AND '@TodaysDate'
SET @MyLastDate = [Todays Date]
我可能错过了一些步骤,因为我错过了一些细节,但这个逻辑应该足以让你走了。