Используя эти данные:
select *
into sch.tmp_data
from (select '2019-01-01', 'some_data_20190101_tag1' union all
select '2019-01-01', 'some_data_20190102_tag_xx_2' union all
select null, 'some_data_20180101_tag3' union all
select '2019-01-01', null union all
select '2019-01-01', '' union all
select '2019-02-01', 'some_data_20190201_tag4');
Я хотел бы получить две строки, которые гарантированно соответствуют первым двум записям строки, и ничего больше.Другими словами, я хочу выполнить поиск AND
, чтобы найти два уникальных шаблона на основе группировки дат.
Соответствующие шаблоны:
some_data_<YYYYMMDD>_tag<digit(s)>
some_data_<YYYYMMDD>_tag_xx_<digit(s)>
Результат должен быть (на основе вышеуказанных данных):
COL1 COL2
2019-01-01 some_data_20190101_tag1
2019-01-01 some_data_20190102_tag_xx_2
Если сопоставлен только один из этих двух шаблонов, это бесполезно, оба ДОЛЖНЫ быть в результате.
Я получил это близко:
WITH cte_test AS (
select c1,c2, row_number() OVER (order BY c1,c2) rn
from (
select c1,c2 from sch.tmp_data where c2 like 'some_data_20%_tag%' union all
select c1,c2 from sch.tmp_data where c2 like 'some_data_20%_tag_xx_%'
)
group by c1,c2
--having count(distinct c2) = 2
) выберите c1, c2 из cte_test, где rn <= 2; </p>
Но я не уверен, гарантирую ли это, что я просто получу нужные мне строки.
Спасибо!