如何将当前行与PostgreSQL中的下一行和上一行进行比较?
发布时间:2020-12-13 16:27:02 所属栏目:百科 来源:网络整理
导读:我想知道如何在SQL查询中检索结果,与下一行或上一行进行一些逻辑比较.我使用PostgreSQL. 例 假设我的数据库中有两个属性(有序位置和随机数),我想要检索偶数之间的奇数.我该怎么做? 真正的用法 我想要找到具有类别NAME(而且这个词不是名字)的另外两个单词之
我想知道如何在SQL查询中检索结果,与下一行或上一行进行一些逻辑比较.我使用PostgreSQL.
例 真正的用法 编辑
这是我使用WINDOW功能的解决方案.我使用了滞后和领导功能.两者都从偏移当前行的行中返回一个值.滞后回落,铅在接下来的偏移.
SELECT tokcat.text FROM ( SELECT text,category,chartype,lag(category,1) OVER w as previousCategory,lead(category,1) OVER w as nextCategory FROM token t,textBlockHasToken tb WHERE tb.tokenId = t.id WINDOW w AS ( PARTITION BY textBlockId,sentence ORDER BY textBlockId,sentence,position ) ) tokcat WHERE 'NAME' = ANY(previousCategory) AND 'NAME' = ANY(nextCategory) AND 'NAME' <> ANY(category) 简体版本: SELECT text FROM ( SELECT text,lag(category) OVER w as previous_cat,lead(category) OVER w as next_cat FROM token t JOIN textblockhastoken tb ON tb.tokenid = t.id WINDOW w AS (PARTITION BY textblockid,sentence ORDER BY position) ) tokcat WHERE category <> 'NAME' AND previous_cat = 'NAME' AND next_cat = 'NAME'; 要点 > = ANY()不需要,窗口函数返回单个值>子查询中的一些冗余字段>不需要按列进行排序,即PARTITION BY – ORDER BY适用于分区>不要使用混合的案例标识符,而不引用,它只会导致混淆. (更好的是:不要在PostgreSQL中使用混合大小写标识符) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |