sql - 带有 where 子句的 Postgres 窗口函数

标签 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

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

谢谢

最佳答案

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

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

关于sql - 带有 where 子句的 Postgres 窗口函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16575345/

相关文章:

c# - 什么是好的企业级 pdf 生成解决方案?

java - 是否可以在 @Formula 上使用具有 boolean 字段来比较日期的表达式逻辑?

PostgreSQL ecpg : How to call function with several out parameters

sql - Postgres 使用其他表插入冲突更新

mysql - 使用 where 和语句在 1 列中搜索

mysql - 更新和插入,重复键

mysql - 如何进行两个连接并在没有数据的情况下显示空值

postgresql - 在 Postgres 中使用重复序列和分页均匀选择分类列上的记录

mysql - 使用sql提交的正确方法

sql - 比较两个SQLite表的差异