Фильтрация нежелательных записей из таблицы
У меня есть таблица (на самом деле, результат запроса), который имеет следующие атрибуты:
континент
Имя группы
название работы
статус
run_time
Для данного задания может быть состояние "выполняется", "завершено" или "не выполнено". Иногда задание не выполняется, а затем запускается снова. Или работа будет работать вечно, и начнется другая работа. Таким образом, в некоторых случаях задание может иметь две записи с двумя разными статусами (например, "не выполнено" и "выполнено"). В этих случаях я хочу только одну запись. Каждый раз, когда одна из записей "завершена", я бы хотел исключить другую.
Как бы я поступил так? Как я могу условно устранить "перекрывающиеся" записи?
Редактировать:
Одним из вариантов, о котором я подумал, было присоединение таблицы к себе (используя предложение WITH, так как моя таблица на самом деле является запросом). Однако я не уверен, как заставить это работать или какие условия установить, чтобы возвращалась только одна из двух требуемых записей.
1 ответ
Отличный способ сделать это - нормализовать ваш стол. Возьмите свой стол и измените его так:
Continent
Group_name
job_name
run_time
statusID_FK
Затем сделайте идентификатор статуса внешним ключом, связанным с таблицей состояния:
StatusID
Status_Description
(Описание статуса может называться как угодно. Значения будут "полными" и т. Д.)
Затем все, что вам нужно будет сделать, это установить отношение 1-Много между таблицами.
Как только это будет сделано, добавьте логику в код своего приложения, которая будет проверять через заданный вами интервал (возможно, всякий раз, когда выполняется обновление), существует ли запись, которая "завершена" и может быть удалена в соответствии с вашими критериями.
Если он найден, просто используйте хранимую процедуру SQL, чтобы удалить его из базы данных.
По крайней мере, так я и сделаю. Надеюсь это поможет!