2012-08-30 170 views
2

我有這樣的一個表:SQL查詢來比較行

Sequence ID  Date   other fields 

    1   23  2012-01-01 
    2   23  2012-02-03 
    3   23  2012-02-02 
    4   45  2012-01-01 
    5   45  2012-01-02 
    6   52  2012-01-01 
    7   52  2012-03-01 
    ..   ... 

我需要返回我行已倒日期的查詢(也有例如在舊的日期

更高的序列abow應該與序列2和3回rowq對於ID 23,SEQ 2具有日期更新該序列無3.

感謝

+0

的數據庫是U使用的小提琴? –

+0

我已更新我的答案..請檢查它 –

回答

1
select * from 
    (select T1.Sequence as S1, T2.Sequence as S2, T1.ID 
    from T as T1, T as T2 
    where T1.Sequence < T2.Sequence 
     and T1.Date > T2.Date 
     and T1.ID = T2.ID) Subq 
    inner join T on (T.ID = Subq.ID 
       and (T.Sequence = Subq.S1 or T.Sequence = Subq.S2)) 
1

試試這個:

select Sequence,ID,Date 
from 
    (select *, 
    ROW_NUMBER() over (partition by ID order by date) as row_num_date, 
    ROW_NUMBER() over (partition by ID order by Sequence) as row_num_seq 
    from your_table)a 
where row_num_date!=row_num_seq 


SQL Fiddle Demo

3
select t1.* 
from <table> t1 
    join <table> t2 
    on t1.Id=t2.Id 
    and (((t1.Sequence>t2.Sequence) and (t1.Date<t2.Date)) or 
     ((t1.Sequence<t2.Sequence) and (t1.Date>t2.Date))) 

http://sqlfiddle.com/#!3/beaf8/2/0