Postgres窗口函数与where子句

时间:2013-05-15 21:34:39

标签: sql postgresql

我在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中解决。

由于

1 个答案:

答案 0 :(得分:1)

查看lead()功能。那个人可以看一下窗口中的“下一行”。

http://www.postgresql.org/docs/current/static/functions-window.html