gpt4 book ai didi

sql - 使用 Oracle SQL 找出逗号分隔字符串中的最大数字

转载 作者:行者123 更新时间:2023-12-04 22:43:04 26 4
gpt4 key购买 nike

我有一个包含两列的表格:

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(即 greatest(new_Revisions) < greatest(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

只是为了提供一些内容,几周前我怀疑有修订消失了。为了对此进行调查,我决定对所有文档的所有修订进行计数,并拍摄快照以便稍后进行比较,以查看是否确实缺少修订。

我拍摄的快照包含以下列:

docnumber, count, revisions

使用 listagg 函数将修订存储在逗号分隔的列表中。

我现在遇到的问题是实时表,已经添加了新的修订版,所以当我使用减号比较主表和快照时,我得到了不同,因为主表中的新修订。

尽管在实际表中修订是单独的行,但在快照表中我没有单独的行。

我正在考虑以相同格式重新创建快照并比较它们的唯一方法,看看主表中的最大修订是否低于快照表中的最大修订(因此为什么我试图找出如何找到以逗号分隔的字符串中的最大值)

最佳答案

享受吧。

select    xmlcast(xmlquery(('max((' || OLD_REVISIONS || '))') RETURNING CONTENT) as int) as OLD_REVISIONS_max
,xmlcast(xmlquery(('max((' || NEW_REVISIONS || '))') RETURNING CONTENT) as int) as NEW_REVISIONS_max

from t
;

关于sql - 使用 Oracle SQL 找出逗号分隔字符串中的最大数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40219867/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com