Поиск дубликатов записей - PullRequest
1 голос
/ 07 мая 2019

Таблица как ниже:

Request#  type  status
123         R     partially complete 
123         S     complete
345         S     partially complete
345         S     complete

R означает короткий запрос, S означает длинный запрос. Каждый тип запроса превращается в S, когда статус «завершен». Мне нужно найти все запросы типа "R", которые были выполнены

select * 
from table 
where type ='R' and status='partially complete' OR 
      type ='s' and status='complete'

Ожидаемый результат

Request#  type  
123         R

Ответы [ 3 ]

1 голос
/ 07 мая 2019

Это обобщение решения Барбароса:

select Request#
from "table" 
group by Request#
having sum(case when status = 'complete' then 1 else 0 end) > 0 and
       sum(case when type = 'R' then 1 else 0 end) > 0;
1 голос
/ 07 мая 2019

Полагаю, вы хотите это

select Request#, min(type) as type
  from "table" 
 group by Request#
 having min(status)='complete'
0 голосов
/ 07 мая 2019

Один простой подход использует агрегирование:

SELECT
    request
FROM yourTable
GROUP BY
    request
HAVING
    COUNT(CASE WHEN type = 'R' AND status = 'partially complete' THEN 1 END) > 0 AND
    COUNT(CASE WHEN type = 'S' AND status = 'complete' THEN 1 END) > 0;

Мы также можем сформулировать это с помощью самостоятельного соединения:

SELECT DISTINCT t1.request
FROM yourTable t1
INNER JOIN yourTable t2
    ON t1.request = t2.request AND
       t2.type = 'S' AND t2.status = 'complete'
WHERE
    t1.type = 'R' AND
    t1.status = 'partially complete';
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...