簡體   English   中英

比較連續行中的兩個值

[英]Compare two values from consecutive rows

我有來自儀表的以下數據

博士ID 百分比 視頻 IAPD 設備ID 是聚合 標識符 時間戳 月TS 年TS
1366 0 5 0 49 0 NULL 2001-01-01 00:00:00.0000000 1 2001年
34661090 0 5 0 49 0 1366 2001-01-01 00:00:00.0000000 1 2001年
34661091 0 5 0 49 0 1366 2001-02-01 00:00:00.0000000 2 2001年
34661092 0 5 0 49 0 1366 2001-03-01 00:00:00.0000000 3 2001年
34661093 0 5 0 49 0 1366 2001-04-01 00:00:00.0000000 4 2001年
34661094 0 5 0 49 0 1366 2001-05-01 00:00:00.0000000 5 2001年
34661095 1 5 0 49 0 1366 2001-06-01 00:00:00.0000000 6 2001年
34661096 0 5 0 49 0 1366 2001-07-01 00:00:00.0000000 7 2001年
34661097 0 5 0 49 0 1366 2001-08-01 00:00:00.0000000 8 2001年
34661098 0 5 0 49 0 1366 2001-09-01 00:00:00.0000000 9 2001年
34661099 0 5 0 49 0 1366 2001-10-01 00:00:00.0000000 10 2001年
34661100 0 5 0 49 0 1366 2001-11-01 00:00:00.0000000 11 2001年
34661101 0 5 0 49 0 1366 2001-12-01 00:00:00.0000000 12 2001年

這里第一行是父設備,其子設備下方的行。 我想確保所有子設備(其 PrID 等於 DrID)應具有與父設備相同的“attPercentage”值。

所以這里 DrID 34661095 將成為問題,因為它的“attPecentage”值為 1 與其“attPecentage”值為 0 的父設備(第一行)不同

這只是我擁有的龐大數據集中的一個小樣本。

此處預期的 output 將是所有子行,其值與父行不同。

例如,在這種情況下,預期結果應該是第 7 行,DrID 為 34661095

任何有關如何做到這一點的指導將不勝感激。

您可以通過子查詢獲得。 如果 DRID 字段是唯一的,那么下面的查詢將滿足您的目的。

select DrID,
       attPercentage,
       VID,
       IAPD,
       DeviceID,
       IsAggregate,
       PrID,
       Timestamp,
       monthTS,
       YearTS
from tableName child
where PrID is not null
  and attPercentage <> (
                       select attPercentage
                       from tableName parent
                       where parent.DrID = child.PrID)

一種方法是join

select t.*, t.attPercentage as parent_attPercentage
from t left join
     t tp
     on t.prid = tp.drid;

另一種方法——假設子行中的所有值都是0NULL是使用 window 函數:

select t.*,
       max(t.attPercentage) over (partition by coalesce(t.prid, t.drid)) as parent_attPercentage
from t;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM