2010-08-19 9 views
0

나는 patient_id, obs_id, obs_date 컬럼을 가진 환자 테이블을 가지고있다. Obs_id는 임상 관찰 (예 : 체중계, 혈압 측정기 등)의 ID이며 obs_date는 관찰 결과입니다. 각 환자는 다른 날짜에 여러 개의 판독 값을 가질 수 있습니다.날짜 종속성으로 쿼리 할 SQL

insert into temp_table (select patient_id, 0 from patients_table 
where obs_id = 1 group by patient_id having count(*) >= 1) 

나는 또한 업데이 트를 실행 : 현재 I = 1을 obs_id 가진 모든 환자를 얻고 임시 테이블에 삽입하는 쿼리를 가지고 (두 개의 열, patient_id, 나는 여기에 0으로 설정 플래그가)

다음
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 모든 환자에 대한 1로 플래그를 설정합니다 다음 질문 : "obs_id = 1 후에 obs_id = 5 인 모든 환자를 얻으십시오". 각 쿼리의 선택에 min (obs_date) 또는 max (obs_date)를 추가 한 다음 두 번째 쿼리에 "AND v.obs_date> temp_table.obs_date"를 추가하면 해당 값이 정확합니까 ??

그룹별로 명령문을 제거하거나 결합하지 않아도되는 이유는 이러한 쿼리가 (웹 응용 프로그램의) 코드 생성기에 의해 생성되고 코드 생성기를 엉망으로 만들지 않고 그 수정을 수행하기를 원하기 때문입니다. 그것을 다시 쓰십시오.

미리 감사드립니다.

답변

1

SQL의 장점은 세트와 함께 작동한다는 것입니다. 임시 테이블을 만들거나 모든 절차를 수행 할 필요가 없습니다. 당신은 문제 (obs_id 1 일 이후 5 obs_id 모든 환자를 찾아)을 설명으로

, 나는 당신이 당신의 코드를 처리 도움이되지 않습니다, 물론이

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 

같은 뭔가를 시작 했죠 발전기. 때로는 일을 쉽게 만드는 도구도 사용할 수 있습니다.

+0

감사합니다. 전 완전히 이해합니다. 그러나, 나는 그 코드 생성기를 구현하지 않았고, 다른 누군가의 코드를 수정하고있다. 전반적인 코드 생성 전략을 변경하는 것은 나에게 선택 사항이 아니므로이 문제로 인해 어려움을 겪고 있습니다. – wsb3383