2016-07-26 89 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