我有两个表:
第一个是DIAGNOZY
,其中包含以下列:year
,ID
,gendre
,birthday
,ICZ
,其ID为医疗保健提供者diagnosis_code
和date
。每行都是医生为病人记录的。来自相同/不同医生(ICZ)且诊断相同/不同的每个ID都有多个记录。
第二张表PACIENT_SEKVENCE_DETAIL
是用于ID
的具有特殊药物的表,他们之前使用过的药物种类数量,第一次开药日期(date_first
)和特殊药物(date_special)
的开药日期。
我只想选择在DIAGNOZY
的同一天或更晚于date_special
的诊断日期的患者,并且整个患者只接受这一诊断时间(无多重诊断)。
我最后想要的表将包含两列:PACIENT_SEKVENCE_DETAIL
和ID
(诊断),并且会有满足指定条件的不同患者-因此每个患者都会在其中只是一次,因为他不会做出一个以上的诊断。
我的代码如下:
DG
但是,它返回所有患者所有诊断信息,并且完全忽略内部选择中的情况。
我对SQL非常陌生,我自己使用Internet进行学习,所以请原谅我的愚蠢。
诊断表:
select t1.ID, diagnosis_code as DG
from (
select d.ID as ID, count(distinct diagnosis_code) as count_dg
from DIAGNOZY d join PACIENT_SEKVENCE_DETAIL s on d.ID=s.ID
where d.date>=s.date_special
group by d.ID
having count(distinct diagnosis_code)=1) t1
join DIAGNOZY f on t1.ID=f.ID
group by t1.ID, f.diagnosis_code
PACIET_SEKVENCE_DETAIL
year ID gendre birth_date ICZ diagnosis_code date
2012 35902587895 M 2000 94618000 L400 2012-06-11
2013 35902587895 M 2000 94619000 L400 2013-02-04
2012 35902587895 M 2000 94618000 L400 2012-07-11
2013 35902587895 M 2000 94618000 L400 2013-05-10
2011 35902591668 M 2000 08009000 L400 2011-09-27
2015 35902596431 M 2000 89177000 M0800 2015-08-26
2010 35902612150 M 2000 10194000 M459 2010-01-07
因此,在最终表中,只有在表DIAGNOZY中只有一个不同诊断并且在另一个表中(其中nr_types_befor为0)的人才能获得ID和诊断代码。
答案 0 :(得分:0)
您的查询全部合并在一起,而示例数据未汇总在一起,您引用的是d.start_data yest,只有别名为s的表保存了where子句中的所有列。
答案 1 :(得分:0)
您可以尝试一下。
SELECT DISTINCT
d.ID,
d.diagnosis_code DG
FROM DIAGNOZY d
WHERE EXISTS (
SELECT d1.ID FROM
DIAGNOZY d1
INNER JOIN PACIENT_SEKVENCE_DETAIL s ON d1.ID = s.ID
AND s.nr_types_before = 0
WHERE
d1.ID = d.ID
AND d1.date >= s.date_special
GROUP BY d1.ID
HAVING COUNT(DISTINCT d1.diagnosis_code) = 1 )