2016-07-04 44 views
0

我有一個表列如下:從N個 賬戶,指示燈,起始日期,結束日期 指標的變化,每隔一段時間(隨機)爲Y. 當指標更新開始日期更改,以便結束日期。 開始日期和結束日期可能因爲此表上其他標誌的更改而更改,因此Indicator可能未更新,但開始和結束日期已完成。SQL來隔離記錄從更新數據會議標準

我試圖使用SQL其中指標已經與Y去了N的帳戶的生活隔離所有帳戶記錄,因爲這是不可能發生的

任何幫助表示讚賞

感謝

+0

我掙扎地看到,你能做到這與查詢。也許你可以添加一個觸發器,它將行添加到一個存檔表中,這樣你就可以查詢與當前值進行比較了嗎?或者考慮約束來阻止這種情況的發生? – saml

+0

我沒有得到你想要的,你可以添加一些示例行和預期結果嗎? – dnoeth

回答

0

我認爲你所要做的就是提前到下一個記錄,看看指標是否改變。如果您試圖隔離只有指標發生變化的情況,則需要展開比較以包括記錄中可能已更改的每個其他屬性。如果你的桌子非常大,那麼在整個桌子上運行這個桌子可能會咀嚼資源。

因爲我沒有樣本數據進行測試,所以我提供的SQL是以您正在嘗試完成的精神編寫的。 ColAColB代表您的主鍵或任何唯一標識您表中的記錄。該窗口函數是用來向前看一行,所以你可以Indicator比較當前記錄的值的Indicator下一條記錄的值:

SELECT ColA 
    , ColB 
    , Indicator 
    , StartDate 
    , EndDate 
    , MAX(Indicator) OVER (PARTITION BY ColA, ColB 
          ORDER BY StartDate 
          ROWS BETWEEN 1 FOLLOWING AND 1 FOLLOWING) AS NextIndicator 
    , MAX(StartDate) OVER (PARTITION BY ColA, ColB 
          ORDER BY StartDate 
          ROWS BETWEEN 1 FOLLOWING AND 1 FOLLOWING) AS NextStartDate 
    , MAX(EndDate) OVER (PARTITION BY ColA, ColB 
          ORDER BY StartDate 
          ROWS BETWEEN 1 FOLLOWING AND 1 FOLLOWING) AS NextEndDate 
    FROM MyTable 
QUALIFY NextIndicator <> Indicator;