我有一个有两列的表:
OLD_REVISIONS |NEW_REVISIONS
-----------------------------------
1,25,26,24 |1,26,24,25
1,56,55,54 |1,55,54
1 |1
1,2 |1
1,96,95,94 |1,96,94,95
1 |1
1 |1
1 |1
1 |1
1,2 |1,2
1 |1
1 |1
1 |1
1 |1
>对于每一行,都会有一个文档修订列表(以逗号分隔)
>逗号分隔列表在两列中可能相同但订单/排序可能不同 – 例如
2,1 | 1,2
我想找到OLD_REVISIONS列中最高版本低于NEW_REVISIONS中最高版本的所有实例
以下符合该标准
OLD_REVISIONS |NEW_REVISIONS
-----------------------------------
1,2 |1
1,56,55,54 |1,55,54
>我尝试使用MINUS选项的解决方案(将表连接到自身),但即使列表相同但顺序错误,它也会返回差异
>我尝试了GREATEST函数(即最大(new_Revisions)< great(old_revisions)),但我不确定为什么最大(OLD_REVISIONS)总是只返回逗号分隔值.它不返回最大值.我怀疑它是在比较字符串,因为列是VARCHAR.
此外,MAX功能需要一个数字.
还有另一种方法可以实现上述目标吗?我正在寻找一个纯SQL选项,所以我可以打印出结果(或者可以打印出结果的PL / SQL选项)
编辑
抱歉没有提到这个但是对于NEW_REVISIONS我确实在表中有数据,其中每个修订都在一个单独的行中:
"DOCNUMBER" "REVISIONNUMBER"
67 1
67 24
67 25
67 26
75 1
75 54
75 55
75 56
78 1
79 1
79 2
83 1
83 96
83 94
只是为了给出一些内容,几周前我怀疑有修改消失了.
为了对此进行调查,我决定对所有文档的所有修订进行计数,然后拍摄快照以便稍后进行比较,看看是否确实缺少修订.
我拍摄的快照包含以下列:
docnn,count,revisions
使用listagg函数将修订存储在逗号分隔的列表中.
我现在遇到的麻烦是现场表,新版本已经添加,所以当我使用MINUS比较主表和快照时,我会有所不同,因为
主表中的新修订版.
即使在实际表中,修订是单独的行,在快照表中我没有单独的行.
我想的是以相同格式重新创建快照的唯一方法,并比较它们发现主表中的最大修订是否低于快照表中的最大修订版(因此我试图找出如何找出最大值在逗号分隔的字符串中)