【发布时间】:2020-05-01 01:58:27
【问题描述】:
我有 3 张表,我必须根据以下条件检查某些记录的计数。
IF
count(T1DM DX = 0) & COUNT (T2DM DX = 0) & COUNT (T2DM MEDS >= 1) & COUNT(ABC > 6.5 OR DEF > 11.1 OR GHI > 7) >= 1 THEN "CASE"
ELSE
DO NOTHING
**OR**
IF
count(T1DM DX = 0) & COUNT (T2DM DX >=1) & COUNT (T1DM MEDS = 0) & COUNT (T2DM MEDS = 0) & COUNT(ABC > 6.5 OR DEF > 11.1 OR GHI > 7) >= 1 THEN "CASE"
ELSE
DO NOTHING
我的创建表语句如下
CREATE TABLE DX(
DX_id serial Primary Key
person_id NOT NULL,
condition_name VARCHAR (50) UNIQUE NOT NULL,
cond_id VARCHAR (355) UNIQUE NOT NULL,
condition_start_date TIMESTAMP NOT NULL,
condition_end_date TIMESTAMP NOT NULL
);
CREATE TABLE RX(
RX_id serial Primary Key
person_id NOT NULL,
presciption_name VARCHAR (50) UNIQUE NOT NULL,
presc_id VARCHAR (355) UNIQUE NOT NULL,
pres_start_date TIMESTAMP NOT NULL,
pres_end_date TIMESTAMP
);
CREATE TABLE Lab(
Lab_id serial Primary Key
person_id NOT NULL,
Test_name VARCHAR (50) UNIQUE NOT NULL,
Test_id VARCHAR (355) UNIQUE NOT NULL,
Test_start_date TIMESTAMP NOT NULL,
Test_value FLOAT
);
这是我尝试过的
IF ((select count(*) from public.DX where cond_id = 21) == 0 AND (select count(*) from public.DX where cond_id = 23) == 0 AND (select count(*) from public.RX where presc_id = 33) >=1
AND (select count(*) from (select * from public.Lab where test_id in (41,42,43)) where test_value > 6.5)) THEN "FOUND"
ELSE
DO NOTHING
但这会引发错误。谁能帮我实现多个 if 子句与它们之间的 AND/OR 逻辑运算符?
注意事项
1) DX 表可以有多个条件。根据流程图,我们需要寻找 T1DM 和 T2DM。我们可以使用 cond_ids (T1DM - 21, T2DM - 23) 来识别它们
2) RX 表可以有多个处方药。根据流程图,我们需要寻找 T1DM 药物和 T2DM 药物。我们可以使用 presc_ids (T1DM meds- 31, T2DM meds - 33) 识别它们
3) 实验室表可以有多个测量/测试结果。根据流程图,异常实验室定义为下列 3 种测量中的任何一种的阈值违规。
a) Three measurements - ABC, DEF, GHI. Test_ids for these three are 41,42,43
b) ABC > 6.5
c) DEF > 11.1
d) GHI > 7
【问题讨论】:
-
将您不清楚的演示片段与the apparent source of the diagram for this from your deleted earlier question about this 进行比较:“算法 1 T2DM 病例选择算法。该算法将患者级别记录 (pt) 作为参数,并且返回患者的病例状态 ({CASE; UNKNOWN}) 作为结果。"等等。
-
“抛出错误”是什么意思?当你得到一个你不期望/不理解的结果时,停止试图找到你的总体目标并找出你的误解是什么。--隔离第一个意外/误解的子表达式及其输入和输出,了解什么是误解、错字、错误的推理等导致了它。 (调试基础。)询问一下。请在代码问题中给出minimal reproducible example--cut & paste & runnable code;具有期望和实际输出(包括逐字错误消息)的示例输入(作为初始化代码);标签和版本;明确的规范和解释。
-
我已经给出了我试过的代码
标签: sql postgresql if-statement select where-clause