У меня есть таблица пациентов, в которой есть следующие столбцы: идентификатор_пациента, идентификатор_обс, дата_обс. 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" ко второму, это правильно??
Причина, по которой мне не нужно удалять группу по оператору или объединять, заключается в том, что эти запросы генерируются генератором кода (из веб-приложения), и я хотел бы сделать эту модификацию, не испортив генератор кода или переписывая его. .
Спасибо заранее,