У меня есть простая таблица, созданная с помощью подзапроса, который применяет множество различных фильтров.
| project
1 | Hello
2 | Hello 2.0
3 | Ordinary Sheep
4 | Sheep
Следующим шагом будет удаление проектов с очень похожими именами (например, если у проекта такое же имя, но за ним стоит 2.0).
В этом случае мне нужен мой запрос, чтобы удалить Project 2.0
из результатов. Эта маленькая проблема сложнее, чем я ожидал.
Мой лучший выбор, кажется, это ниже, где я правильно определяю проект, который следует исключить, но если я инвертирую операцию, я получаю дублированные данные из-за самосоединения.
SELECT
q1.name,
q2.name
FROM subquery q1
JOIN subquery q2 ON q1.name LIKE q2.name || '%'
WHERE q1.id <> q2.id;
Большое спасибо!
Может быть, вы можете сопоставить первое вхождение цифры в проекте и исключить все после этого. Затем примените к нему RTRIM
и DISTINCT
. Однако это не сработает, если в самом названии проекта есть номер.
with s as
(
--your query that you have inside sub-query
)
select DISTINCT RTRIM(regexp_replace(project, '^([^\d]+)\d.*$','\1')) from s;