【发布时间】:2020-04-08 09:52:45
【问题描述】:
我在 Oracle 中有以下数据
ITEM_CNT ID
0 1
1 1
2 1
3 1
0 2
2 2
3 2
0 3
1 3
2 3
3 3
4 3
我想要以下格式的数据。请注意,由于 ITEM_CNT 0 被 ID 1 占用,因此 ID 2 应该占用下一个可用数字 2。同样 ITEM_CNT 1 被 ID 3 占用,依此类推。
请注意,如果 item_cnt 已被一个 ID 占用,则它不能被另一个 ID 使用。 还要始终选择可用的最少 ITEM_CNT。
ITEM_CNT ID
0 1
2 2
1 3
另外,请注意我尝试了下面的方法,但是对于每一行,我必须再编写一个递归代码,如果有人可以使下面的代码递归,那就太好了
SELECT Min(m3.item_cnt) item_cnt,
m3.id id,
m3.item item
FROM my_fil_data m3
WHERE m3.item_cnt NOT IN (SELECT Min(m4.item_cnt)
FROM my_fil_data m4
WHERE m3.id > m4.id
AND m4.item_cnt NOT IN (SELECT
Min(m5.item_cnt)
FROM my_fil_data m5
WHERE m4.id > m5.id
AND m5.item_cnt
NOT IN
(SELECT
Min(m6.item_cnt)
FROM my_fil_data m6
WHERE m5.id > m6.id
GROUP BY m6.id)
GROUP BY m5.id)
GROUP BY m4.id)
GROUP BY id,
item
【问题讨论】:
-
为什么
ID2 没有得到ITEM_CNT1?为什么ID3 会得到 2 个ITEM_CNT值? -
因为 ID 2 没有 ITEM_CNT 1
-
但你的问题是“注意,因为 ITEM_CNT 0 被 ID 1 占用,因此 ID 2 应该采用下一个可用数字,即 2”
-
我已经编辑了问题
标签: sql oracle recursive-query