Короче, у меня есть две таблицы:
(1) pharmacy_claims
(столбцы: user_id
, date_service
, claim_id
, record_id
, prescription
)
(2) medical_claims
(столбцы: user_id
, date_service
, provider
, npi
, cost
)
Я хочу найти user_id
в (1)с определенным значением 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 соответственно. Тогда я бы хотел получить user_id 1 и 2 из medical_claims
и получить все их данные до этих соответствующих дат.
Я попытался сделать это, построив временную таблицу в таблице 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
sa 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 результатов, когда должно быть несколько тысяч. Правильно ли настроено? Вероятно, это не самый эффективный подход, но для меня это звучит неплохо, поэтому не уверен, что происходит.