У меня есть набор данных, в котором я пытаюсь удалить записи со следующими условиями:
Если на практике есть несколько записей с одинаковой датой и хотя бы одна запись имеет причину "L & B", тоЯ хочу, чтобы все данные на эту дату были удалены.
DECLARE t table(practid int, statusdate date, reason varchar(100)
INSERT INTO t VALUES (1, '2018-03-01', 'L&B'),
(1, '2018-03-01', 'NULL'),
(1, '2018-04-01, 'R&D'),
(2, '2018-05-01, 'R&D'),
(2, '2018-05-01, 'R&D'),
(2, '2018-03-15', NULL),
(2, '2018-03-15', 'R&D),
(3, '2018-07-01, 'L&B)
С этим набором данных я бы хотел получить следующий результат:
PractId StatusDate Reason
1 2018-04-01 R&D
2 2018-05-01 R&D
2 2018-05-01 R&D
2 2018-03-15 NULL
2 2018-03-15 R&D
Я пытался решить эту проблему с помощью оконной функции, ноя застреваю:
SELECT *, ROW_NUMBER() OVER
(PARTITION BY practid, statusdate, CASE WHEN reason = 'L&B' THEN 0 ELSE 1 END) AS rn
FROM table
Из моего запроса я не могу понять, как сохранить Practid = 2, так как я хотел бы сохранить все записи.