【发布时间】:2020-03-05 08:46:52
【问题描述】:
简而言之,我有两张桌子:
(1)pharmacy_claims(列:user_id、date_service、claim_id、record_id、prescription)
(2)medical_claims(列:user_id、date_service、provider、npi、cost)
我想在 (1) 中找到具有特定prescription 值的user_id,找到它们最早的date_service(例如min(date_service)),然后将这些user_id 与它们的最早日期一起使用服务作为一个群组,从 (2) 中提取所有相关数据。基本上我想在他们第一次在pharmacy_claims 中开出给定处方之前找到他们所有的medical_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's
(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 个结果。这设置正确吗?这可能不是最有效的方法,但对我来说它看起来不错,所以不确定发生了什么。
【问题讨论】:
标签: sql apache-spark apache-zeppelin