如何在 SQL Server 中使用 SQL 实现以下任务

Posted

技术标签:

【中文标题】如何在 SQL Server 中使用 SQL 实现以下任务【英文标题】:How to implement the following task using SQL in SQL Server 【发布时间】:2018-03-06 18:45:33 【问题描述】:

我要完成这项任务,我必须从DIM_CARE_TEAM_MEMBER 表中选择care_team_member_name。条件是,对于特定的care_team_member_Engagement_id,我们需要选择活跃的成员,即其care_team_member_end_date 为空,对于非活跃成员,我们为特定的care_team_member_Engagement_id 选择最大的care_team_member_end_date

我能够使用以下查询实现第二部分

select  
    [care_team_member_name], 
    [care_team_member_Engagement_id],
    [care_team_member_end_date],
    B.A 
from 
    (select 
         care_team_member_name,care_team_member_end_date,
         [care_team_member_Engagement_id],
         row_number() over(partition by [care_team_member_Engagement_id] order by care_team_member_end_date) A
     from 
         DIM_CARE_TEAM_MEMBER) B  
where 
    B.A = 1

但我无法实施第一部分,我选择 care_team_member_name 以获得特定的参与 ID

例如:

care_team_member_name   care_team_member_Engagement_id  care_team_member_start_date care_team_member_end_date
TM-000022181            a1Y0q0000000woaEAA               2017-08-16                  NULL
TM-000022182            a1Y0q0000000wobEAA               2017-08-16                  NULL
TM-000022183            a1Y0q0000000wocEAA               2017-08-16                  NULL
TM-000022184            a1Y0q0000000wodEAA               2017-08-16                  NULL
TM-000022185            a1Y0q0000000woeEAA               2017-08-16                  NULL
TM-000030523            a1Y0q0000000woVEAQ               2018-01-03                  2018-02-28
TM-000031508            a1Y0q0000000woVEAQ               2018-01-25                  2018-02-28
TM-000031798            a1Y0q0000000woVEAQ               2018-03-01                  2018-03-05
TM-000031802            a1Y0q0000000woVEAQ               2018-03-01                  2018-03-05
TM-000031803            a1Y0q0000000woVEAQ               2018-03-01                  2018-03-05
TM-000031805            a1Y0q0000000woVEAQ               2018-03-01                  2018-03-05
TM-000031806            a1Y0q0000000woVEAQ               2018-03-01                  2018-03-05
TM-000023500            a1Y0q0000000woVEAQ               2017-09-21                  2018-03-05
TM-000023503            a1Y0q0000000woVEAQ               2017-09-22                  2018-03-05

从这个表中,我必须选择结束日期为空的名称

【问题讨论】:

您期望样本数据的输出是什么? 我希望护理团队成员的姓名应该是 TM-000023503 用于参与 ID a1Y0q0000000woVEAQ 和 TM-000022181 用于参与 ID a1Y0q0000000wobEAA 【参考方案1】:

我不确定我是否正确理解了这个问题,但试试这个:

SELECT tm.*
FROM (
    SELECT care_team_member_Engagement_id id, 
         NULLIF(MAX(coalesce(care_team_member_end_date,'29991231')),'29991231') end_date 
    FROM DIM_CARE_TEAM_MEMBER
    GROUP BY care_team_member_Engagement_id 
) ids
INNER JOIN DIM_CARE_TEAM_MEMBER tm ON
        tm.care_team_member_Engagement_id = ids.id 
    AND tm.care_team_member_end_date = ids.end_date

【讨论】:

以上是关于如何在 SQL Server 中使用 SQL 实现以下任务的主要内容,如果未能解决你的问题,请参考以下文章

[转载]在SQL Server 中,如何实现DBF文件和SQL Server表之间的导入或者导出?

如何实现 sql2008 和 sql2012 共存?

SQL Server 2008转换成sql 2000数据库如何操作?

如何在sql server中把数据库中的日期字段转换为短日期格式

sql server中如何实现自增字段?

Oracle与SQL Server如何实现表数据同步