2013-05-15 3 views
1

У меня есть 4 таблицы в Postgres со следующей организациейфункция окна Postgres с тем, где пункт

reads: 
id -- primary key 
value -- integer 
read_datetime -- datetime 
patient_id -- integer 
reader_id -- integer 

readers: 
id -- primary key 

patient_readers: 
id -- primary key 
patient_id -- integer 
reader_id -- integer 
issuance_datetime -- datetime 
unassignment_datetime -- datetime 
issued_value -- integer 

patients: 
id -- integer 

Я хочу, чтобы создать запрос, где я могу получить самую последнюю информацию о выдачи для конкретного чтения. До сих пор у меня есть следующий запрос

SELECT 
value, 
read_datetime, 
issued_value, 
issuance_datetime, 
unassignment_datetime 
FROM "reads" 
INNER JOIN "readers" ON "readers"."id" = "reads"."reader_id" 
INNER JOIN "patient_readers" ON "patient_readers"."reader_id" = "readers"."id" AND patient_readers.patient_id = reads.patient_id 
INNER JOIN patientsON patients.id = reads.patient_id 
ORDER BY reads.patient_id , read_datetime, issuance_datetime 

Это производит вывод, где группа строк одинаковы для всей информации, кроме информации о выдаче (issuance_datetime, unassignment_datetime и issued_value), как я бы ожидать. Я хотел бы агрегировать информацию о выдачи в отношении к readers.id и patients.id, а потом я бы только как один набор информации выдачи, где

read_datetime > issuance_datetime AND (
    (unassignment_datetime IS NOT NULL AND read_datetime < unassignment_datetime) OR 
    (NEXT(issuance_datetime) IS NOT NULL AND read_datetime < NEXT(issuance_datetime) OR 
    (NEXT(issuance_datetime) IS NULL) 

Вот я, составляющие функцию NEXT() но в основном я хочу смотреть в одну строку по отношению к окну. Я также хочу сделать предложение WHERE в окне (или так кажется). Я только начал читать о функциях окна, поэтому многие из них для меня новы (и я не уверен, что функции окна - это то, что я хочу), поэтому я надеюсь, что это разрешится в Postgres.

Благодаря

ответ

Смежные вопросы