SQL для запроса по дате зависимости - PullRequest
0 голосов
/ 19 августа 2010

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

Большое спасибо заранее,

1 Ответ

1 голос
/ 20 августа 2010

Преимущество SQL в том, что он работает с наборами. Вам не нужно создавать временные таблицы или получать все процедурные.

Когда вы описываете проблему (найдите всех пациентов, у которых obs_id 5 после obs_id 1), я бы начал с чего-то подобного

select distinct p1.patient_id 
from patients_table p1, patients_table p2 
where 
p1.obs_id = 1 and
p2.obs_id = 5 and
p2.patient_id = p1.patient_id and
p2.obs_date > p1.obs_date

Конечно, это не поможет вам разобраться с вашим генератором кода. Иногда мешают инструменты, облегчающие работу.

...