我使用的是Oracle 10g,並且我有一張表,用於存儲某個人某個日期的數據快照。每天晚上,一個外部流程爲任何對其核心數據有任何更改(存儲在別處)的人員添加新行。這允許使用日期來查詢查詢,以查明某個人在過去一天看起來像什麼。即使只有人的一個方面發生了變化,也會向表中添加一個新行 - 這意味着許多列在切片之間具有重複的值,因爲並非每個快照中的每個細節都發生了變化。在Oracle中提取唯一時間片
下面是一個數據樣本:
SliceID PersonID StartDt Detail1 Detail2 Detail3 Detail4 ...
1 101 08/20/09 Red Vanilla N 23
2 101 08/31/09 Orange Chocolate N 23
3 101 09/15/09 Yellow Chocolate Y 24
4 101 09/16/09 Green Chocolate N 24
5 102 01/10/09 Blue Lemon N 36
6 102 01/11/09 Indigo Lemon N 36
7 102 02/02/09 Violet Lemon Y 36
8 103 07/07/09 Red Orange N 12
9 104 01/31/09 Orange Orange N 12
10 104 10/20/09 Yellow Orange N 13
我需要寫翻出其中一些中肯的比特,而不是整個記錄,改變了時間片記錄的查詢。所以,參考上面的內容,如果我只想知道Detail3已經從其先前的值發生變化的片段,那麼我預計只會得到具有PersonID 101的SliceID 1,3和4以及PersonID的SliceID 5和7的行102和SliceID 8爲PersonID 103和SliceID 9爲PersonID 104.
我想我應該可以使用某種Oracle分層查詢(使用CONNECT BY [PRIOR])來獲得我想要的,但我還沒有想出如何編寫它。也許你可以幫忙。
謝謝你的時間和考慮。
慢慢地越來越近:) 雖然daddy6Elbows說他希望SliceID 8爲PersonID 103和SliceID 9爲PersonID 104. – 2009-11-20 09:13:04
謝謝。每個人都有很好的答案,但我必須點頭表示最完整的答案 - 包括例子和額外的評論。但是我給每個人一點意見,因爲他們在技術上都是正確的。 – witttness 2009-11-20 16:00:14