SQL выбирает самую последнюю дату для каждой записи - PullRequest
0 голосов
/ 16 января 2019

Я пытаюсь получить результаты за самую последнюю дату выдачи со ссылкой на указанную дату выдачи. Почему мой запрос не работает?

select 
visits.patient_visit_id,pv.patient_id,pv.dispensing_date as dispensing_date,pv.dose,pv.quantity,pv.duration as days,dc.drug,r.regimen_code
FROM v_patient_visits pv

left join drugcode dc on drug_id = dc.id
left join regimen r on r.id = pv.current_regimen
left join patient_status ps on ps.id = pv.current_status

inner join 
(SELECT patient_visit_id, max(dispensing_date) as max_dispensing_date
 FROM `v_patient_visits`
 GROUP BY patient_id
) as visits 
ON visits.patient_visit_id = pv.patient_visit_id AND
   visits.max_dispensing_date = pv.dispensing_date

where 
pv.dispensing_date <= '2018-12-31'
and regimen_service_type  = 'service one'
and ps.Name = 'Status one'

В результате выбираются правильные идентификатор пациента, доза, количество и дни, но дата выдачи не самая последняя со ссылкой на <= '2018-12-31' </p>

Таблица v_patient_visits выглядит следующим образом:

patient_visit_id    patient_id  dispensing_date    dose    quantity    days    drug    current_regimen    current_status    regimen_service_type
48240   000001  2019-01-16    1OD    39    39    1    11    21    service one
48240   000001  2018-12-06    1OD    39    39    1    11    21    service one
48240   000001  2017-12-05    1OD    39    39    2    12    21    service one
48240   000001  2016-12-04    1OD    39    39    3    13    21    service one
48241   000002  2019-01-10    1BD    40    40    4    14    22    service two
48241   000002  2018-11-10    1BD    40    40    4    14    22    service two
48241   000002  2017-11-09    1BD    40    40    5    15    22    service two
48241   000002  2016-11-08    1BD    40    40    6    16    22    service two
48242   000003  2017-10-15    1OD    41    41    7    17    21    service one
48242   000003  2016-10-14    1OD    41    41    8    18    21    service one
48242   000003  2015-10-13    1OD    41    41    9    19    21    service one

Может быть несколько записей для одного и того же значения Patient_id, и я хочу, чтобы он выбрал самую последнюю дату выдачи

Таблица кодов препаратов выглядит следующим образом:

id    drug
1   Drug one
2   Drug two
3   Drug three
4   Drug four

Таблица режимов выглядит следующим образом:

id  regimen_code
11  Regimen one
12  Regimen two
13  Regimen three
14  Regimen four

Таблица Patient_status выглядит следующим образом:

id    Name
21  Status one
22  Status two
23  Status three
24  Status four

Как я хочу, чтобы вывод был таким:

patient_visit_id    patient_id  dispensing_date    dose    quantity    days    drug    regimen_code
48240   000001  2018-12-06    1OD    39    39    Drug one    Regimen one
48242   000003  2017-10-15    1OD    41    41    Drug seven    Regimen seven

1 Ответ

0 голосов
/ 16 января 2019

Закрыть. Вам необходимо присоединиться к подзапросу на дату!

(SELECT patient_id, max(dispensing_date) as max_dispensing_date
 FROM `v_patient_visits`
 GROUP BY patient_id
) visits 
ON visits.patient_visit_id = pv.patient_visit_id AND
   visits.max_dispensing_date = pv.dispensing_date
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...