sql - 有两个字段,如何保持唯一元素 2 值的最大数量,但不重复任何元素 1?
问题描述
我们有一些我们无法解决的问题,相关的问题可以用下面的例子来解释:
元素1 | 元素2 |
---|---|
一个 | 1 |
乙 | 1 |
C | 1 |
一个 | 2 |
C | 2 |
D | 4 |
D | 5 |
D | 6 |
需要过滤示例表并保留最大数量的唯一 element2 值,但不重复任何 element1 值。对于此示例,一些可能的解决方案是:
元素1 | 元素2 |
---|---|
一个 | 1 |
C | 2 |
D | 4 |
元素1 | 元素2 |
---|---|
乙 | 1 |
一个 | 2 |
D | 5 |
元素1 | 元素2 |
---|---|
乙 | 1 |
C | 2 |
D | 6 |
...
解决方案
此代码将返回第一个解决方案:
with recursive optimized(n,saved) as (
select 0, cast('' as varchar)
union all
select n + 1,
(
case
when (position(cast(element2 as varchar) in saved)= 0)
then (
case
when(position(element1 in saved)= 0) then
concat(element1, element2)
else
concat(saved)
end
)
else
concat(saved)
end
)
from
optimized
join rownum on n + 1 = rn
),
rownum as(
select
element1,
element2,
row_number() over() as rn
from
example1
)
select distinct element1, element2
from
optimized
join example1 on concat(element1, element2)= saved;
这是输出:
元素1 | 元素2 |
---|---|
D | 4 |
C | 2 |
一个 | 1 |
推荐阅读
- php - PHP urlencode functions
- javascript - 在按钮的 onclick 属性中传递 php 数组并在 javascript 中读取它
- shell - Shell 脚本 - [: -lt: 应为一元运算符
- r - 如何在R中建立计数填充矩阵
- botframework - HTTP 正文中的活动无效或缺失 - 作为对以下内容的响应的错误
- javascript - 防止 jQuery UI Datepicker(内联类型)选择今天的日期
- java - 如何在mongodb java中检索具有值的单个键
- azure - CosmosDB Graph:是否支持每个请求的一致性级别,就像它们用于文档的方式一样?
- prometheus - 如何将 Prometheus 中的指标与以绝对值定义的日期范围聚合
- node.js - 如何使用 Node 运行后端服务器?