需要获取指定的记录(结果为Pass,结果为Fail)仅适用于今天的日期。这样做最好的方法是什么?
SELECT
A.EmployeeNumber,
A.Result,
FROM AssessmentData A
WHERE A.Result = 'PASS' OR A.Result = 'FAIL' AND A.TrainingStartDate = GETDATE()
以上还不完全
亲切的问候
答案 0 :(得分:2)
试试这个:
SELECT
A.EmployeeNumber,
A.Result
FROM AssessmentData A
WHERE A.Result IN ('PASS','FAIL')
AND A.TrainingStartDate >= dateadd(Day, DateDiff(Day, 0, GetDate()), 0)
And A.TrainingStartDate < dateadd(Day, DateDiff(Day, 0, GetDate()), 1)
这里有几个问题。 GetDate()返回日期和时间,所以......除非训练开始日期与当前日期和时间相匹配,否则你将无法获得数据。
另外,在where子句中将AND与OR混合时要小心。操作顺序很重要,因此您应始终使用括号。请注意,我将您的条件更改为IN条件。以下查询等同于我已发布的查询。
SELECT
A.EmployeeNumber,
A.Result
FROM AssessmentData A
WHERE (A.Result = 'PASS' or A.Result = 'FAIL')
AND A.TrainingStartDate >= dateadd(Day, DateDiff(Day, 0, GetDate()), 0)
And A.TrainingStartDate < dateadd(Day, DateDiff(Day, 0, GetDate()), 1)
记下上面代码中的括号。它强制OR'd条件与其他AND条件分开评估。