2011-08-22 60 views
2

我有一個帶有skey列(由序列號生成)和時間戳列的表。sql - 測試記錄按順序插入

我需要編寫一個查詢,它將查找具有更高skey,但比先前記錄更舊的時間戳記的任何記錄,因爲這將指示問題。

即沿着線的東西:

select * from table 
where timestamp < (select max(timestamp) from table where skey less than currrecord) 
order by skey desc; 
+0

看起來像'滯後'可能有助於在單次傳遞數據時做到這一點。 –

+0

「一個更高的skey,但一個更老的時間戳」 - 如果您使用RAC,這是非常正常的,沒有什麼可擔心的。 –

回答

1

使用self join即加入表贊同你提到的標準(SKey來和時間戳)

Select T1.Skey HigherSkey, T2.SKey LowerSkey, T1.Timestamp LowerTimestamp, T2.Timestamp HigherTimestamp 
From MyTable T1 
Inner Join MyTable T2 
    On T1.Timestamp < T2.Timestamp 
    And T1.Skey > T2.Skey 
0

如果你的序列完成(意思是它沒有洞)應該這樣工作:

select t2.* from table t1 
inner join table t2 on t2.skey = t1.skey + 1 
where t2.timestamp < t1.timestamp 
order by t2.skey desc; 

如果沒有,你可以使用類似這樣的事情來獲得ID:

select t2.skey from table t1, table t2 
where t1.skey < t2.skey and t2.timestamp < t1.timestamp 
group by t2.skey