我在Postgres有4个表,有以下组织
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中解决。
由于
答案 0 :(得分:1)
查看lead()
功能。那个人可以看一下窗口中的“下一行”。
http://www.postgresql.org/docs/current/static/functions-window.html