如何将当前行与PostgreSQL中的下一行和上一行进行比较?

如何将当前行与PostgreSQL中的下一行和上一行进行比较?,第1张

概述我想知道如何在SQL查询中检索结果,与下一行或上一行进行一些逻辑比较.我使用PostgreSQL. 例 假设我的数据库中有两个属性(有序位置和随机数),我想要检索偶数之间的奇数.我该怎么做? 真正的用法 我想要找到具有类别NAME(而且这个词不是名字)的另外两个单词之间的单词.排序由句子和位置提供. 编辑 我想知道PostgreSQL的Window函数是否是这种问题的最佳解决方案,而不是执行查询. 我想知道如何在SQL查询中检索结果,与下一行或上一行进行一些逻辑比较.我使用Postgresql.


假设我的数据库中有两个属性(有序位置和随机数),我想要检索偶数之间的奇数.我该怎么做?

真正的用法
我想要找到具有类别name(而且这个词不是名字)的另外两个单词之间的单词.排序由句子和位置提供.

编辑
我想知道Postgresql的Window函数是否是这种问题的最佳解决方案,而不是执行查询.我听说过他们,但从未用过.

这是我使用WINDOW功能的解决方案.我使用了滞后和领导功能.两者都从偏移当前行的行中返回一个值.滞后回落,铅在接下来的偏移.
SELECT tokcat.textFROM (    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    )) tokcatWHERE 'name' = ANY(prevIoUscategory)AND 'name' = ANY(nextcategory)AND 'name' <> ANY(category)

简体版本:

SELECT textFROM (    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)    ) tokcatWHERE  category <> 'name'AND    prevIoUs_cat = 'name'AND    next_cat = 'name';

要点

> = ANY()不需要,窗口函数返回单个值>子查询中的一些冗余字段>不需要按列进行排序,即PARTITION BY – ORDER BY适用于分区>不要使用混合的案例标识符,而不引用,它只会导致混淆. (更好的是:不要在Postgresql中使用混合大小写标识符)

总结

以上是内存溢出为你收集整理的如何将当前行与PostgreSQL中的下一行和上一行进行比较?全部内容,希望文章能够帮你解决如何将当前行与PostgreSQL中的下一行和上一行进行比较?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/sjk/1169343.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-02
下一篇 2022-06-02

发表评论

登录后才能评论

评论列表(0条)

保存