总之,我有两个表:
((1)pharmacy_claims
(列:user_id
,date_service
,claim_id
,record_id
,prescription
)]
((2)medical_claims
(列:user_id
,date_service
,provider
,npi
,cost
)]
我想在(1)中找到具有某个user_id
值的prescription
,找到其最早的date_service
(例如min(date_service)
),然后使用这些user_id
的最早日期为服务作为从(2)中提取所有相关数据的队列。基本上,我想在medical_claims
中首次给他们指定处方之前找到他们的所有pharmacy_claims
数据。
pharmacy_claims
看起来像这样:
user_id | prescription | date_service
1 a 2018-05-01
1 a 2018-02-11
1 a 2019-10-11
1 b 2018-07-12
2 a 2019-01-02
2 a 2019-03-10
2 c 2018-04-11
3 c 2019-05-26
例如,如果我对处方='a'感兴趣,我只希望返回user_id 1和2,日期分别为2018-02-11和2019-01-02。然后,我想从medical_claims
中提取user_id 1和2,并在这些日期之前获取其所有数据。
我尝试执行此操作的方法是在pharmacy_claims
表中建立一个临时表以查询具有给定药物的user_id
,然后将其退回到表中以创建队列user_id
与date_service
的关系>
这是我所做的:
((1)从主要药房索赔表中提取了所有相关数据:
CREATE TABLE user.temp_pharmacy_claims AS SELECT user_id, claim_id, record_id, date_service FROM dw.pharmacyclaims WHERE date_service between '2018-01-01' and '2019-08-31'
这导致〜50,000
user_id
的
((2)创建了一个仅包含user_id
的min(date_service)
的表:
CREATE TABLE user.temp_pharmacy_claims_index AS SELECT distinct user_id, min(date_service) AS Min_Date FROM user.temp_pharmacy_claims GROUP BY 1
((3)创建了最终表(以获得所需的同类群组):
<<CREATE TABLE user.temp_pharmacy_claims_final_index AS SELECT a.userid FROM user.temp_pharmacy_claims a LEFT JOIN user.temp_pharmacy_claims_index b ON a.user = b.user WHERE a.date_service < Min_Date
但是,当应该有几千个时,这使我得到0个结果。这个设置正确吗?这可能不是最有效的方法,但对我来说听起来不错,所以不确定发生了什么。
select mc.*
from medical_claims mc
where mc.date_service < (select min(pc.date)
from pharmacy_claims pc
where pc.user_id = mc.user_id and
pc.prescription = ?
);