我有以下场景,一个包含这些列的表:
table_id|user_id|os_number|inclusion_date
在系统中,os_number对于用户是顺序的,但是由于系统错误,一些用户以错误的顺序插入OS.像这样的东西:
table_id | user_id | os_number | inclusion_date ----------------------------------------------- 1 | 1 | 1 | 2015-11-01 2 | 1 | 2 | 2015-11-02 3 | 1 | 3 | 2015-11-01
>注意在编号2之前插入的编号3
我需要的:
恢复第2行和第3行的table_id,这是乱序的.
我有这两个选择以两个不同的顺序向我显示table_id:
select table_id from table order by user_id,os_number select table_id from table order by user_id,inclusion_date
解决方法
你的问题有点困难,因为没有正确的排序(如所示) – 因为日期可以有关系.因此,使用rank()或dense_rank()函数来比较这两个值并返回不正确顺序的值:
select t.* from (select t.*,rank() over (partition by user_id order by inclusion_date) as seqnum_d,rank() over (partition by user_id order by os_number) as seqnum_o from t ) t where seqnum_d <> seqnum_o;