我正在使用SQL Server2016。我试图在SQL中完成一些我什至不确定是否可以实现的事情,如果可以,我什至不知道从何处开始如何实现它。
我有一个包含以下列的表格:
case_num:ID号
年龄段:18-64岁,65岁以上
BMI:包含数字或没有BMI
BMI_flag:基于BMI和年龄的正常或异常
跟进:说明某人是否进行了跟进。
ServiceDate:访问日期。每个ID有多个访问日期/行,但每个ID的访问量却不同。
我需要创建一个新表并添加一个名为Meets_Criteria的列,该列确定一个人是否符合条件。我只关心该人最近一次访问的合规性,所以我知道我可能需要使用rank_over_partition()。困难在于有六个月的回溯期。我不知道如何让一行取决于其他行中的信息。
一个人符合以下条件:
进行BMI测量,这是正常的。或者过去六个月内的BMI正常。
进行了BMI测量,这是异常的,他们需要进行随访。如果这在过去六个月内发生,他们也符合标准。随访不必与异常BMI测量在同一日期进行。
如果一个人在六个月内进行了正常测量,但是最近一次测量被标记为异常,则必须进行随访以符合标准。
在SQL中这样的事情有可能吗?我应该查看除rank_over_partition之外的哪些功能?
这最终将在PowerBI中使用,因此我也对DAX解决方案持开放态度。
这是示例表
CREATE TABLE mytable(
case_num INTEGER NOT NULL PRIMARY KEY
,age_group VARCHAR(5) NOT NULL
,BMI VARCHAR(6) NOT NULL
,BMI_flag VARCHAR(8) NOT NULL
,Follow_Up VARCHAR(3) NOT NULL
,Service_Date DATE NOT NULL
);
INSERT INTO mytable(case_num,age_group,BMI,BMI_flag,Follow_Up,Service_Date) VALUES (1111,'18-64','22','Normal','No','6/21/2018');
INSERT INTO mytable(case_num,age_group,BMI,BMI_flag,Follow_Up,Service_Date) VALUES (1111,'18-64','No BMI','Abnormal','No','6/21/2018');
INSERT INTO mytable(case_num,age_group,BMI,BMI_flag,Follow_Up,Service_Date) VALUES (2222,'18-64','30','Abnormal','Yes','6/21/2018');
INSERT INTO mytable(case_num,age_group,BMI,BMI_flag,Follow_Up,Service_Date) VALUES (2222,'18-64','No BMI','Abnormal','No','3/30/2018');
INSERT INTO mytable(case_num,age_group,BMI,BMI_flag,Follow_Up,Service_Date) VALUES (3333,'18-64','No BMI','Abnormal','No','6/21/2018');
INSERT INTO mytable(case_num,age_group,BMI,BMI_flag,Follow_Up,Service_Date) VALUES (3333,'18-64','No BMI','Abnormal','Yes','3/30/2018');
INSERT INTO mytable(case_num,age_group,BMI,BMI_flag,Follow_Up,Service_Date) VALUES (3333,'18-64','30','Abnormal','No','2/14/2018');
INSERT INTO mytable(case_num,age_group,BMI,BMI_flag,Follow_Up,Service_Date) VALUES (4444,'18-64','30','Abnormal','No','6/21/2018');
INSERT INTO mytable(case_num,age_group,BMI,BMI_flag,Follow_Up,Service_Date) VALUES (4444,'18-64','24','Normal','No','1/22/2018');