首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >每24个月完成一次培训检查

每24个月完成一次培训检查
EN

Stack Overflow用户
提问于 2019-07-12 23:34:03
回答 2查看 56关注 0票数 2

我正在尝试找出正确的查询,以检查用户自开始工作以来是否每24个月完成一次特定的培训类型。用户需要每24个月完成一定的培训。

代码语言:javascript
运行
复制
    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日之间完成的,则用户应显示完成日期。

预期的结果应该是:如果用户完成了训练

代码语言:javascript
运行
复制
1007 5/15/2018

预期的结果应该是:如果用户没有完成训练

代码语言:javascript
运行
复制
1007 NULL
EN

回答 2

Stack Overflow用户

发布于 2019-07-12 23:46:03

我认为这也需要一些聚合,因为我认为根据OP的描述,员工可能会多次进行培训。那么也许是这样的呢?

代码语言:javascript
运行
复制
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;
票数 1
EN

Stack Overflow用户

发布于 2019-07-13 00:21:35

如果我理解正确的话,您只关心过去24个月内完成的培训日期。这是apply的一个很好的用例

代码语言:javascript
运行
复制
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;
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57010041

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档