我正在尝试找出正确的查询,以检查用户自开始工作以来是否每24个月完成一次特定的培训类型。用户需要每24个月完成一定的培训。
SELECT userid, completiondate
FROM trainingevent
INNER JOIN emplpoyment e
ON e.userid = trainingevent.userid
WHERE userid = 1007
AND trainingtype = 5案例1:假设雇佣开始日期是2017年5月15日,如果该培训类型是在2017年5月15日和2019年5月15日之间完成的,则用户应显示完成日期。
案例2:假设雇佣开始日期是2017年5月15日,如果该培训类型是在2019年5月15日和2021年5月15日之间完成的,则用户应显示完成日期。
预期的结果应该是:如果用户完成了训练
1007 5/15/2018预期的结果应该是:如果用户没有完成训练
1007 NULL发布于 2019-07-12 23:46:03
我认为这也需要一些聚合,因为我认为根据OP的描述,员工可能会多次进行培训。那么也许是这样的呢?
SELECT e.userid,
MAX(CASE WHEN te.completiondate > DATEADD(MONTH, -24, GETDATE()) THEN te.completiondate END)
FROM dbo.employment e
LEFT JOIN dbo.trainingevent te ON e.userid = te.userid
AND te.trainingtype = 5
WHERE e.userid = 1007
GROUP BY e.userid;发布于 2019-07-13 00:21:35
如果我理解正确的话,您只关心过去24个月内完成的培训日期。这是apply的一个很好的用例
SELECT e.userid, te.completiondate
FROM dbo.employment e OUTER APPLY
(SELECT TOP (1) MAX(te.completiondate) as completiondate
FROM dbo.trainingevent te
WHERE e.userid = te.userid AND
te.trainingtype = 5 AND
te.completiondate > DATEADD(MONTH, -24, GETDATE())
) te
WHERE e.userid = 1007
GROUP BY e.userid;https://stackoverflow.com/questions/57010041
复制相似问题