1

我在 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

这会产生输出,其中一组行对于除发行信息(发行信息(发行日期时间、未分配日期时间和发行值)之外的所有信息)都是相同的,正如我所期望的那样。我想汇总关于 reader.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 中解决。

谢谢

4

1 回答 1

1

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

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

于 2013-05-15T21:44:24.370 回答