找到一列的min()日期,然后将其与日期小于该日期的其他表联接

简而言之,我有两个表:

(1)pharmacy_claims(列:user_iddate_serviceclaim_idrecord_idprescription

(2)medical_claims(列:user_iddate_serviceprovidernpicost

我想在(1)中找到具有某个user_id值的prescription,找到它们最早的date_service(例如min(date_service)),然后使用这些{ {1}}以其最早的服务日期为队列,从(2)中提取所有与其关联的数据。基本上,我想在user_id中首次给他们开出给定处方之前找到他们的所有medical_claims数据。

pharmacy_claims看起来像这样:

pharmacy_claims

因此,例如,如果我对prescription ='a'感兴趣,我只希望返回user_id 1和2,日期分别为2018-02-11和2019-01-02。然后,我想从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 中提取user_id 1和2,并在这些日期之前获取其所有数据。

我尝试执行此操作的方法是在medical_claims表中建立一个临时表,以查询具有给定药物的pharmacy_claims,然后将其退回到表以创建包含user_id的一组user_id

这就是我所做的:

(1)从主要药房索赔表中提取了所有相关数据:

date_service

这导致〜50,000 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'

(2)创建了一个仅以user_iduser_id的表:

min(date_service)

(3)创建了一个最终表(以获得所需的同类群组):

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

但是,当应该有几千个时,这使我得到0个结果。这个设置正确吗?这可能不是最有效的方法,但对我来说听起来不错,所以不确定发生了什么。

zjwmomo 回答:找到一列的min()日期,然后将其与日期小于该日期的其他表联接

我认为您只想要一个相关的子查询:

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 = ?
                        );
本文链接:https://www.f2er.com/3136105.html

大家都在问