获取混合了特定值的行,如果值不存在则为null



我有一个这样的表。

text<1ch>eqPath<2th>已启用>空生产真空闲真维护真切换清洁其他空真其他空真暂停空闲空真生产生产[/tr>清洗清洁错误锁定错误
id 类型
1 0 未知
2 1生产
3 2 空闲
4 3 维护
5 4 切换
6 5清洁
7 6 工程
8 7 培训
9 8
1 1 运行"序列/排序/生产线1">
11 运行"序列/排序/第2行">
12 5"分拣/第2行">
13 10维护"序列/排序/行2">

您可以使用ROW_NUMBER来标记行,并在过滤器中使用它来获得预期的结果。

sql查询将类似于-

select id, value, text, type, eqPath, enabled
from 
(select * ,  
row_number() over( partition by value order by eqPath desc) rn 
from <your-table>
where (eqPath is null or eqPath = ?) ) tbl 
where rn = 1 
order by value

查询中的row_number将为每一行放置一个行号,并在值更改时重置,因此最终那些行号匹配1的行将是我们需要获取的行。

这里是一个小提琴

我想我想出了一个解决方案:

SELECT * 
FROM modes
WHERE eqPath IS NULL
AND value NOT IN (
SELECT value 
FROM modes 
WHERE eqPath = ?
)
UNION
SELECT * 
FROM modes
WHERE eqPath = ?
ORDER BY value

最新更新