Как удалить строку, если она повторяется по категориям?

как мне удалить строки, которые имеют дубликаты, и сохранить другую строку по ее категории.

Например, рассмотрим образец таблицы

Item | location | Status
------------------------
123  |   A       |  done
123  |   A       |  not_done
123  |   B       |  Other
435  |   D       |  Other

Так что, по сути, я хочу получить эту таблицу

Item | location | Status
------------------------
123  |   A       |  done
435  |   D       |  Other

Меня не интересует другой статус или местоположение, ЕСЛИ статус выполнен. Если это не «сделано», я бы показал следующее.

Любые подсказки, можно ли создать что-то подобное в SQL-запросе?

3 метода стилизации элементов HTML
3 метода стилизации элементов HTML
Когда дело доходит до применения какого-либо стиля к нашему HTML, существует три подхода: встроенный, внутренний и внешний. Предпочтительным обычно...
Формы c голосовым вводом в React с помощью Speechly
Формы c голосовым вводом в React с помощью Speechly
Пытались ли вы когда-нибудь заполнить веб-форму в области электронной коммерции, которая требует много кликов и выбора? Вас попросят заполнить дату,...
Стилизация и валидация html-формы без использования JavaScript (только HTML/CSS)
Стилизация и валидация html-формы без использования JavaScript (только HTML/CSS)
Будучи разработчиком веб-приложений, легко впасть в заблуждение, считая, что приложение без JavaScript не имеет права на жизнь. Нам становится удобно...
Flatpickr: простой модуль календаря для вашего приложения на React
Flatpickr: простой модуль календаря для вашего приложения на React
Если вы ищете пакет для быстрой интеграции календаря с выбором даты в ваше приложения, то библиотека Flatpickr отлично справится с этой задачей....
В чем разница между Promise и Observable?
В чем разница между Promise и Observable?
Разберитесь в этом вопросе, и вы значительно повысите уровень своей компетенции.
Что такое cURL в PHP? Встроенные функции и пример GET запроса
Что такое cURL в PHP? Встроенные функции и пример GET запроса
Клиент для URL-адресов, cURL, позволяет взаимодействовать с множеством различных серверов по множеству различных протоколов с синтаксисом URL.
1
0
30
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Определите строки с помощью done, если они есть, и установите для них приоритет.

select * except rn
from (
  select item, location, status
       , row_number() over (
           partition by item
           order by case status when 'done' then 0 else 1 end
         ) as rn
  from t
)
where rn = 1

(Я не пробовал, извините за синтаксические ошибки.)

Да, вы можете сделать это с помощью существующего условия, как показано ниже, после включение стандартного SQL.

select * from
yourtable A 
where not exists
(
select 1 from yourtable B 
where A.id=B.id and A.location=B.location
and A.status<>B.status 
AND B.status <> 'done'
)

Другие вопросы по теме