sql - 在 SQL 中添加列,其中每行取决于其他行中的值
问题描述
我正在使用 SQL Server 2016。我正在尝试在 SQL 中完成一些我什至不确定是否可行的事情,如果是,我什至不知道从哪里开始如何实现它。
我有一个包含以下列的表格:
case_num:身份证号
年龄组:18-64、65+
BMI:包含一个数字或没有 BMI
BMI_flag:基于 BMI 和年龄的正常或异常
Follow_up:说明一个人是否有跟进。
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');
解决方案
推荐阅读
- sql - 如何在 SQL 中从 4 个变量中仅生成两个变量?
- c# - 为访问者 IAsyncEnumerable 寻找更好的模式?
- json - React - 当用户在表单中搜索 API 时,如何处理 API 中没有匹配项?
- android - 在 android 上重构为动态功能模块时,构建失败并显示“任务:features:catalog:createDebugCompatibleScreenManifests FAILED”
- reactjs - 如何使用 Nextjs Link 标签和数据解除属性?
- java - 我们如何搜索HashMap
内部没有循环HashSet的对象 >? - flutter - 无效的图像数据错误:如何使用 aws s3 url 在 Flutter 应用程序中显示图像?
- c - 相同的表达式产生完全不同的结果
- javascript - 然后在 Promise 完成之前运行的 Promise 方法
- python - 跳转到字符串中的下一个字符而不使用 Python 中的字符索引