Как обеспечить выбор совпадения с несколькими образцами в двух строках? - PullRequest
0 голосов
/ 21 мая 2019

Используя эти данные:

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>

Но я не уверен, гарантирую ли это, что я просто получу нужные мне строки.

Спасибо!

...