透過比較PostgreSQL 中的目前行與相鄰行來擷取結果
在PostgreSQL 中,相鄰查找行之間的相關性和異常需要特定的方法。其中一個例子涉及識別夾在偶數之間的奇數。透過利用視窗函數有效地實現此邏輯。
這個概念採用滯後函數和超前函數,它們分別從相對於目前行的指定偏移量中提取上一個和下一個值。這是使用這些函數的改進解決方案:
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' = previousCategory AND 'NAME' = nextCategory AND 'NAME' <> category
在此查詢中,視窗函數「w」在子查詢中定義,按「textBlockId」和「sentence」對資料進行分區,同時按“textBlockId”對數據進行排序」、「句子」和「位置」。因此,對於每一行,「previousCategory」包含前一行的類別,「nextCategory」包含後續行的類別。
我們透過檢查目前行的類別是否與' 不同來過濾結果NAME”,而“previousCategory”和“nextCategory”都與“NAME”匹配。這使我們能夠識別名稱類別兩側的非名稱單字。
或者,我們可以簡化查詢:
SELECT text FROM ( SELECT text, category, 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';
總體而言,使用視窗函數提供了一種比較相鄰行的有效方法在PostgreSQL 中,能夠識別特定的序列模式或異常。
以上是如何使用視窗函數高效查找PostgreSQL中相鄰行之間的資料異常?的詳細內容。更多資訊請關注PHP中文網其他相關文章!