덕분에 키의 수를 계산 : 이것은 그것의 연장이SQL 서버 2008 : 여러 테이블에서 여러 날짜 범위에서 오늘 아침에 내 질문에 대답 사람들에게
SQL Server 2008: Count Number of Keys In Multiple Date Ranges
입니다 그리고 난 분명하지 않다 이 경우 이전 솔루션을 일반화하는 방법.
내가 작업하고있는 데이터베이스에는 의약품, 실험실 값 및 여러 테이블의 환자 세트에 대한 진단이 있습니다.
년 동안X = 1996 2008 : 위의 질문에 대한 유사
내가 년 X에 규정 된 특정 약을 한 환자의 수를 계산하려면, 특정 실험실 값 (년 X에서 촬영 이 마지막 하나는 조금 다릅니다!) 그리고 x 년도에 아직 해결되지 않은 1996 년 또는 그 이후의 구체적인 진단.
편집 : 그것은 하지 pt_id 것으로 밝혀 테이블의에서 기본 키 - (때문에 DISTINCT
느린 것)하지만 별개 사용되는 솔루션으로 잘 될 것이라고 나는 SELECT COUNT DISTINCT(pm.pt_id)
을 읽어 봤는데 것과 그것이 효과가 있었다면. 여기
SELECT COUNT (pm.pt_id)
FROM dm.medications pm
/*patient was prescribed statins together with fibrates this year*/
WHERE pm.pt_id IN
(
SELECT statins.pt_id
FROM dm.patient_medications statins
INNER JOIN dm.patient_medications other_meds
ON statins.pt_id = other_meds.pt_id
WHERE Year(other_meds.order_dts) = 2008
AND Year(statins.order_dts) = 2008
AND statins.generic_nm in ('Atorvastatin','Cerivastatin')
AND other_meds.generic_nm in ('Clofibrate','Fenofibrate','Gemfibrozil')
)
/* patient had a diagnosis code in the list first diagnosed in 1996 or later and not yet resolved in this year */
WHERE pm.pt_id in
(
SELECT pd.pt_id,
FROM dm.diagnoses pd
WHERE pd.icd9_cd IN('728.89','729.1','710.4','728.3','729.0','728.81','781.0','791.3')
AND Year(pd.init_noted_dts) >= 1996
AND pd.rslvd_dts IS NOT NULL
AND Year(pd.rslvd_dts) >= 2008
)
/* patient had a lab value above 1000 this year */
AND pm.pt_id IN
(
SELECT pl.pt_id
FROM dm.labs pl
WHERE pl.lab_val > 1000
AND pl.lab_val IS NOT NULL
AND pl.lab_val < 999999
AND pl.lab_nm = 'CK (CPK)'
AND Year(pm.order_dts) = 2008
)
/* we have demographic information about this patient */
AND pm.pt_id IN
(
SELECT p.pt_id
FROM mrd.demographics p
)
/* this is a real person */
AND pm.pt_id IS NOT NULL
감사를 다시 오브먼! 위의 편집을 참조하십시오 (pt_id는 기본 키가 아닙니다). 또한, 매년 'AND Year (pm.order_dts) = 2008'과'AND Year (pd.rslvd_dts)> = 2008'을 수행 할 수 있는지 잘 모르겠다. 그 해 (2008 년이 아닐 수도 있음)의'order_dts'와 그 해의 언젠가 ('2008 년이 아닐지도 모른다)'resolved_dts. – raoulcousins
개정판을 사용해보십시오. – RedFilter
흠. 가져 오는 메시지 207, 수준 16, 상태 1, 줄 32 'year'잘못된 열 이름입니다. ('t4 pm.pt_id = t4.pt_id 및 t3.Year = t4.Year'에있는't4 행) 그러나 문제가있는 곳을 보지 못했습니다. 마지막 내부 조인을 주석 처리하면 레코드가 반환되지 않습니다. – raoulcousins