2016-07-26 2 views
0

の最後の6ヶ月間のカウントを取得します。これは私が思いついたものですが、それが完全にきれいになることは確かではありません。は私が今年の上半期及び会計年度の最後の6ヶ月間の両方でサービスを持っていたすべての患者をカウントする必要がある最初の6ヶ月間と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回前半にして、再度年

+1

- あなたは今年の最初の6ヶ月で何を意味するのか、あなたはその後、会計年度の最後の6ヶ月を言うならば - - 選択したい日付を教えて非常にあなたは前半からレコードを選択する必要があるかもしれません困惑させます年の後半から記録するためにINNER JOIN - 両方存在する場合 - 選択された行 – Cato

+0

年を見てください。これらの日付は、2015年3月1日から2016年2月29日の間です。会計年度はFYまたはCYのいずれかです。私はFYをやっています。患者は、特定の年の最初の6ヶ月と特定の年の最後の6ヶ月の両方で訪問する必要があります。 – JFulton

+0

0投票 \t ええ、申し訳ありませんが、私は間違っていました - 前半から選択して、IF EXISTS(同じ人の後半から選択)を使用して選択を完了してください – 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

datepartは暦年のみ会計年度ではない –

+0

私は同意しますが、wheはdatepartを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 
関連する問題