我使用的是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