有一个这样的表:
+---------+--------+--------+
| id | prefix | number |
+---------+--------+--------+
| 2528361 | 100#11 | 4444 |
| 2528364 | 100#13 | 4444 |
| 2528362 | 100#12 | 2222 |
| 2528363 | 100#12 | 3333 |
+---------+--------+--------+
查询是“SELECT id,prefix,number WHERE(SOME_AND_OR)”
我需要删除前缀为OR号的重复条目的字段,如下所示:
+---------+--------+--------+
| id | prefix | number |
+---------+--------+--------+
| 2528361 | 100#11 | 4444 |
| 2528362 | 100#12 | 2222 |
+---------+--------+--------+
如果你能帮助我,我将非常感激。
答案 0 :(得分:1)
我们可以尝试进行双重聚合,一个用于删除前缀中的重复项,另一个用于删除数字中的重复项。首先,在单独的视图中对前缀进行聚合:
CREATE VIEW yourView AS
SELECT p1.*
FROM yourTable p1
INNER JOIN
(
SELECT prefix, MIN(number) AS min_number
FROM yourTable
GROUP BY prefix
) p2
ON p1.prefix = p2.prefix AND p1.number = p2.min_number
然后,对数字进行第二次聚合:
SELECT v1.*
FROM yourView v1
INNER JOIN
(
SELECT number, MIN(prefix) AS min_prefix
FROM yourView
GROUP BY number
) v2
ON v1.number = v2.number AND v1.prefix = v2.min_prefix
请注意,如果一组记录(例如3个或更多)具有重叠的数字和前缀,则此逻辑可能会失败。在这种情况下,上述查询可能会丢失一些信息。但我仍然认为这是一个潜在的答案,因为你的样本数据并不意味着这种情况会发生。
<强>输出:强>
在这里演示: