2012-08-30 169 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