2014-12-05 24 views
0

我的表格有2個數據集,一個數據集有醫生辦公室數據,另一個數據集有醫院數據。所以我想知道的是,如果病人在醫院最初入院90天后跟蹤他的醫生。患者可以有多個入院日期,如果他們在90天后跟隨他們的醫生,我們會分別查看每個入院情況。計算應該是如果患者在90天后使用數據添加功能在醫生後面跟進醫生

if service_date - discharge_Date > 90 then flag as 1 



SET NOCOUNT ON 
GO 

DECLARE @TEST TABLE 
(
    [NAME] VARCHAR(15) 
    ,[SERVICE_DT] DATETIME 
    ,[DSCH_DT] DATETIME 
    ,[SRC] VARCHAR(50) 
    ,[LOC] VARCHAR(50) 
) 



INSERT INTO @TEST ([NAME], [SERVICE_DT], [DSCH_DT], [SRC], [LOC]) 
VALUES ('MIKE', '2014-01-01', '2014-01-01', 'Hospital', 'NY') 
     ,('MIKE', '2014-2-27', '2014-02-28', 'Hospital', 'NY') 
     ,('MIKE', '2014-07-15', '2014-07-15', 'Hospital', 'NY') 
     ,('DAVID', '2014-09-04', '2014-09-04', 'Hospital', 'NY') 
     ,('DAVID', '2014-04-01', '2014-04-02', 'Hospital', 'NY')  
     ,('TOM', '2014-05-01', '2014-08-15', 'Hospital', 'TX') 

     ,('MIKE', '2014-03-02', '9999-01-01', 'Doctor_Offfice', 'NY') 
     ,('MIKE', '2014-05-22', '9999-01-01', 'Doctor_Offfice', 'NY') 
     ,('DAVID', '2014-01-01', '9999-01-01', 'Doctor_Offfice', 'NY') 
     ,('DAVID', '2014-05-03', '9999-01-01', 'Doctor_Offfice', 'NY') 
     ,('TOM', '2014-08-20', '9999-01-01', 'Doctor_Offfice', 'TX') 
     ,('DAVID', '2014-12-02', '9999-01-01', 'Doctor_Offfice', 'NY') 



;WITH MYTEST ([NAME], [SERVICE_DT], [DSCH_DT], [SRC], [LOC]) AS 
(
    SELECT NAME 
      ,[SERVICE_DT] 
      ,[DSCH_DT] 
      ,[SRC] 
      ,LOC 

    FROM @TEST 
) 
,HOSP AS 
(
SELECT NAME 
      --,[SERVICE_DT] 
      ,[DSCH_DT] 
      ,[LOC] FROM MYTEST 
      WHERE SRC = 'Hospital' 
) 
,DOC AS 
(
SELECT NAME 
      ,[SERVICE_DT] 
      --,[DSCH_DT] 
      ,[SRC] FROM MYTEST 
      WHERE SRC = 'Doctor_Offfice' 
) 

    SELECT HOSP.NAME, HOSP.DSCH_DT, DOC.SERVICE_DT, HOSP.LOC AS HOSP_SRC, DOC.SRC AS DOC_SRC, CASE 
    WHEN HOSP.DSCH_DT < DateAdd(d, 90, DOC.SERVICE_DT) THEN 1 ELSE 0 END AS FU90 FROM HOSP INNER 
    JOIN DOC ON HOSP.NAME = DOC.NAME 

SET NOCOUNT OFF 
GO 
+2

我在你嘗試無厘頭什麼的醫院和部分工作。您正在尋找90天內的後續訪問。鑑於醫院就診時間可能超過一天,您不應該在出院後90天內尋找隨訪嗎? – 2014-12-05 20:17:25

+0

是的,它應該從排出日期開始。 – moe 2014-12-05 20:19:10

+0

我給你一個提示。 datediff函數比dateadd更適合您正在嘗試的內容。 – 2014-12-05 20:36:25

回答

1

Original Fiddle已接近。

這在技術上符合所有提供的要求,但與您想要的結果不符。
所以要麼是不正確的(或缺少一些),要麼是您的預期結果。

具體來說,我不知道如何解釋二醫院探訪並在這兩個90天的訪問博士...

這個作用:

  1. 它會將數據分爲兩集。一個是博士辦公室,一個是醫院。 (你是用CTE做的)
  2. 然後它根據患者姓名加入這些組,並在出院後90天內進行dr訪問。
  3. 然後評估dr.location是否爲null(可以真正評估任何值),但如果是,則表示由於左聯合他的作品,他們沒有跟進。

SELECT H.name, H.service_Dt, H.DSCH_DT, H.src, H.loc, 
CASE WHEN DR.LOC is not null then 1 else 0 end as FollowUp90 
FROM test H 
LEFT JOIN (SELECT name, service_Dt, DSCH_DT, src, loc 
      FROM TEST 
      WHERE SRC = 'Doctor_Offfice') DR 
    ON DR.Name = H.Name 
and DR.Service_DT between H.DSCH_DT and DATEADD(DAY, 90, H.DSCH_DT) 
WHERE H.Src = 'Hospital' 
GROUP BY H.name, H.service_Dt, H.DSCH_DT, H.src, H.loc, 
CASE WHEN DR.LOC is not null then 1 else 0 end 
Order by H.Name, H.Service_DT 

就像我將得到沒有進一步的要求定義或解釋爲什麼你的預期結果是他們的方式。他們不符合您的要求。

---編輯後接受: 爲了說明第一次出現,我們只需要在子查詢中分出服務日期並添加一個組。

但是,如果有人在同一天跟進了兩位不同的醫生,這仍然會導致發現兩個條目。

SELECT H.name, H.service_Dt, H.DSCH_DT, H.src, H.loc, 
CASE WHEN DR.LOC is not null then 1 else 0 end as FollowUp90 
FROM test H 
LEFT JOIN (SELECT name, min(service_Dt) Service_DT, loc, src 
      FROM TEST 
      WHERE SRC = 'Doctor_Offfice' 
      GROUP BY name, loc,src ) DR 
    ON DR.Name = H.Name 
and DR.Service_DT between H.DSCH_DT and DATEADD(DAY, 90, H.DSCH_DT) 
WHERE H.Src = 'Hospital' 
GROUP BY H.name, H.service_Dt, H.DSCH_DT, H.src, H.loc, 
CASE WHEN DR.LOC is not null then 1 else 0 end 
Order by H.Name, H.Service_DT 

Updated Fiddle

+0

謝謝,如果邁克去了醫院2或3個不同的日期,我們總是看每次入院的出院日期,並與醫生辦公室的服務日期比較。如果邁克在醫院有三次入院,而且只有一次就診,但符合90天的要求,那麼我們說邁克有三次隨訪。希望我解釋一下好點兒 – moe 2014-12-05 20:53:12

+0

上面的小提琴修改爲[link](http://sqlfiddle.com/#!3/ba397/13)。同樣的問題,但是,如果Mike在2014年2月27日入院後有2次dr訪問(3/2和5/22)? – Beth 2014-12-05 20:57:21

+0

邁克於2014年1月1日和2014年2月28日出院。 3/2博士的訪問在兩者的90天內。這位博士的訪問是否符合兩者的90天要求?如果是的話,那麼上面的SQL和小提琴就可以滿足你的需求。如果它不幫助我理解爲什麼。因爲我相信它。 – xQbert 2014-12-05 21:07:40

相關問題