Исключая данные с двумя последовательными условиями в Sql - PullRequest
0 голосов
/ 30 января 2020

У меня таблица выглядит следующим образом.

Numbers   No         ZNo      Place   Year     AId                          ABC
2   201905190611122 9208363 A/C/T/0/434 2019    4BBA17BB-01A9-41A6-BFA7-004CA0E6686F    1448
2   201802262493590 9208363 A/C/T/0/434 2018    4A895857-4E51-4ADC-836A-22D04E5D0B62    2008
1   20180119827875  9208364 A/C/T/0/435 2018    89BFD858-92AC-463B-91DF-54C22FDF7517    1150
1   20180119827875  9208365 A/C/T/0/436 2018    89BFD858-92AC-463B-91DF-54C22FDF7517    1150
2   201804273541023 9208366 A/C/T/0/437 2018    B01EFCA6-8397-4FA9-9EAD-13BE985D63DD    1348
2   201905197566364 9208366 A/C/T/0/437 2019    43E3D908-4AAD-4832-9981-115A5F9E9FC3    1466
2   201802084364285 9208367 A/C/T/0/438 2018    20BB4E90-6F59-484E-ADD3-5635F7CAACC3    1138
2   201802091458406 9208367 A/C/T/0/438 2018    E9085238-8437-4628-A125-09E5C811AB8D    1248

Я хочу записать запрос, который сначала найдет те же значения "Place". Затем он проверит столбцы «Год». Если значения года одинаковы для тех же значений места, данные будут сохранены. Таким образом, в основном это должно выглядеть так:

Numbers   No         ZNo      Place   Year     AId                          ABC
2   201802084364285 9208367 A/C/T/0/438 2018    20BB4E90-6F59-484E-ADD3-5635F7CAACC3    1138
2   201802091458406 9208367 A/C/T/0/438 2018    E9085238-8437-4628-A125-09E5C811AB8D    1248

Можете ли вы помочь мне с этим?

Ответы [ 3 ]

1 голос
/ 30 января 2020

Иметь производную таблицу (подзапрос), возвращающую комбинации место / год, которые существуют как минимум дважды. JOIN его результат:

select t.*
from tablename t
join (select Place, Year
      from tablename
      group by Place, Year
      having count(*) >= 2) dt
  on t.place = dt.place and t.year = dt.year
1 голос
/ 30 января 2020

Вы можете использовать not exists:

select t.*
from table t
where not exists (select 1 from table t1 where t1.Place = t.Place and t1.year <> t.year);

Таким образом, вы также получите A/C/T/0/435 & A/C/T/0/436, потому что у него нет других лет. Таким образом, вы можете добавить другой уникальный столбец в подзапрос. Я обнаружил, no является уникальным в данных образца:

select t.*
from table t
where not exists (select 1 
                  from table t1 
                  where t1.Place = t.Place and t1.year <> t.year and t1.no <> t.no
                 );
0 голосов
/ 30 января 2020

Вы можете использовать оконные функции:

select t.*
from (select t.*, count(*) over (partition by place, year) as cnt
      from t
     ) t
where cnt >= 2;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...