У меня есть таблица пациентов, в которой есть следующие столбцы: Patient_id, obs_id, obs_date.Obs_id - это идентификатор клинического наблюдения (например, показания веса, показания артериального давления и т. Д.), А obs_date - когда это наблюдение было принято.Каждый пациент может иметь несколько показаний в разные даты ... и т. Д.В настоящее время у меня есть запрос, чтобы получить всех пациентов, у которых obs_id = 1, и вставить их во временную таблицу (имеет два столбца, Patient_id и флаг, который я установил здесь 0):
insert into temp_table (select patient_id, 0 from patients_table
where obs_id = 1 group by patient_id having count(*) >= 1)
Я также выполняюоператор обновления, чтобы установить флаг 1 для всех пациентов, у которых также был obs_id = 5:
UPDATE temp_table SET flag = 1 WHERE EXISTS (
SELECT patient_id FROM patients_table WHERE obs_id = 5 group by patient_id having count(*) >=1
) v WHERE temp_table.patient_id = v.patient_id
Вот мой вопрос: как мне изменить оба запроса (без их объединения или удаления группы по утверждению), напримерчто я могу ответить на следующий вопрос: «получить всех пациентов, у которых obs_id = 5 после obs_id = 1».Если я добавлю min (obs_date) или max (obs_date) к выбору каждого запроса, а затем добавлю «AND v.obs_date> temp_table.obs_date» ко второму запросу, это правильно?
Причина, по которой мне не нужно удалять оператор group by или объединение, заключается в том, что эти запросы генерируются генератором кода (из веб-приложения), и я хотел бы сделать это изменение, не испортив кодгенератор или переписать его.
Большое спасибо заранее,