2016-07-26 63 views
0

我需要计算所有患者谁在第一六个月今年和过去六个月的本财年有一个服务。这是我想出来的,但不确定它会完全干净。获取计数的第六个月,过去六个月FYear

with sd as 
(
select cln.cln_urn, MAX(srv_date) As Last_D, MIN(srv_date) AS First_d 
    from cw_domain dmn 
    inner join cw_service srv on srv.srv_dmn_fk=dmn.dmn_pk 
    inner join cw_client cln on cln.cln_pk=srv.srv_cln_fk 
    inner join cw_subservice sbs on sbs.sbs_pk=srv.srv_sbs_fk 
    inner join cw_service_category ct on ct.srv_ct_rpk=sbs.sbs_srv_ct_rfk 
WHERE srv.srv_date >= '03/01/2015' 
     and srv.srv_date <= '02/29/2016' 
     and srv_ct_rpk = '002' 
     group by cln_urn 
     having MAX(srv_date)>= MIN(srv_date)+180 

    ) 

select count (distinct cln_urn) 
from sd 

本报告研究的是正在跟进治疗的客户数量。为了让我们的客户群,以“照顾”被认为是一定要让他们看到他们的医生每年两次:一次是在今年上半年又在今年下半年

+1

- 告诉我们要选择什么样的日期 - 你所说的前6个月的一年的意思是,如果你那么说的最后6个月财年 - 很困扰,你可能需要从上半年的纪录yera的,然后INNER JOIN从今年下半年记录 - 如果同时存在 - 再行选择 – Cato

+0

看看一年。这些日期在2015年3月1日至2016年2月29日之间。FY年可以是FY或CY。我正在做风云。患者需要在指定年份的前六个月和指定年份的最后六个月内访问以符合资格。 – JFulton

+0

0票下来 \t 啊,我知道,对不起,我错了 - 你可以从上半年的选择,然后使用IF EXISTS(选择..from为同一人下半场)完成选择 – Cato

回答

0

,如果你想为每一个客户算多少服务已经有了,你需要使用计数功能。

select HalfOfYear 
    , NumOfPatients = count(Client) 
from (select 
     cln_urn as Client 
     ,case when datepart(q,srv_date) in (1,2) then 'FirstHalf' 
       when datepart(q,srv_date) in (3,4) then 'SecondHalf' 
       end as HalfOfYear 
    from cw_domain dmn 
    inner join cw_service srv on srv.srv_dmn_fk=dmn.dmn_pk 
    inner join cw_client cln on cln.cln_pk=srv.srv_cln_fk 
    inner join cw_subservice sbs on sbs.sbs_pk=srv.srv_sbs_fk 
    inner join cw_service_category ct on ct.srv_ct_rpk=sbs.sbs_srv_ct_rfk 
    where srv.srv_date >= '03/01/2015' 
     and srv.srv_date <= '02/29/2016' 
     and srv_ct_rpk = '002' 

    ) as x 
group by HalfOfYear 
+0

日期部分基于正在返回宿舍历年不仅没有财政年度 –

+0

我同意,但是可以磨片之间的日期部分更改为其他条件一样srv_date ......然后......然后上半年做... – Mat

+0

关闭。我需要的是所有在上半场和下半场进行拜访的客户。不是第一个和第二个一半的数字。尽管如此,我会进一步研究。 – JFulton

0

这应该可以做到。把你的日期换成@from和@thru吧。

WITH sd AS 
(
    SELECT 
     DISTINCT 
     cln.cln_urn, 
     CASE 
      WHEN srv.srv_date < DATEADD(MONTH, 6, @from) THEN 1 
      WHEN srv.srv_date >= DATEADD(MONTH, 6, @from) THEN 2 
      END AS 'half' 
    FROM 
     cw_domain dmn 
     INNER JOIN cw_service AS srv 
      ON srv.srv_dmn_fk = dmn.dmn_pk 
     INNER JOIN cw_client cln 
      ON cln.cln_pk = srv.srv_cln_fk 
     INNER JOIN cw_subservice sbs 
      ON sbs.sbs_pk = srv.srv_sbs_fk 
     INNER JOIN cw_service_category ct 
      ON ct.srv_ct_rpk = sbs.sbs_srv_ct_rfk 
    WHERE 
     srv.srv_date >= @from 
     AND srv.srv_date <= @thru 
     AND srv_ct_rpk = '002' 
) 

SELECT 
    COUNT(cln.cln_urn) 
FROM 
    sd AS fh 
    JOIN sd AS sh 
     ON fh.cln_urn = sh.cln_urn 
WHERE 
    fh.half = 1 
    AND sh.half = 2