加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-13 16:27:02 所属栏目:百科 来源:网络整理
导读:我想知道如何在SQL查询中检索结果,与下一行或上一行进行一些逻辑比较.我使用PostgreSQL. 例 假设我的数据库中有两个属性(有序位置和随机数),我想要检索偶数之间的奇数.我该怎么做? 真正的用法 我想要找到具有类别NAME(而且这个词不是名字)的另外两个单词之
我想知道如何在SQL查询中检索结果,与下一行或上一行进行一些逻辑比较.我使用PostgreSQL.


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

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

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

这是我使用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中使用混合大小写标识符)

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读