Требуется помощь по запросам T-SQL - PullRequest
0 голосов
/ 08 мая 2018

Мне нужна помощь в написании запросов T-SQL для удаления записей из приведенных ниже примеров данных 1 и 2.

Образец данных-1 : Для того же идентификатора участника_id & problem_id мне нужно удалить запись со статусом «Ошибка» и все записи до состояния «Ошибка». Поэтому в приведенном ниже примере мне нужно удалить записи с version_id в (1,2,3,4).

Member_ID   Problem_ID  Version_ID  Status
AA           10            1        Active
AA           10            2       Resolved
AA           10            3        Active
AA           10            4         Error
AA           10            5         Active

Пример данных-2 : Для того же элемента member_id & problem_id мне нужно удалить запись со статусом «Ошибка» и любые записи до состояния «Ошибка», пока в статусе не будет указано «Завершено». Поэтому в приведенном ниже примере мне нужно удалить записи с version_id в (3,4).

Member_ID   Problem_ID  Version_ID  Status
AA           10            1        Active
AA           10            2       Completed
AA           10            3        Active
AA           10            4         Error
AA           10            5         Active

Любая помощь будет принята с благодарностью. Большое спасибо, KS.

1 Ответ

0 голосов
/ 08 мая 2018

Таким образом, могут возникнуть проблемы с этим решением в зависимости от того, может ли состояние «Завершено» или «Ошибка» встречаться несколько раз:

select sd.* 
-- delete sd
from SampleData sd
join (
    select Member_ID, Problem_ID,
        MaxCompleted = max(case when [Status] = 'Completed' THEN Version_ID else 0 END),
        MinErrored = min(case when [Status] = 'Error' THEN Version_ID else null end)
    from SampleData
    group by Member_ID, Problem_ID) as rm on
    sd.Member_ID = rm.Member_ID
    and sd.Problem_ID = rm.Problem_ID
    and sd.Version_ID > rm.MaxCompleted
    and sd.Version_ID <= rm.MinErrored

Этот код позволит вам сначала выбрать / удалить строки, которые вы хотите удалить.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...