Row_Number () OVER PARTITION BY на основе значения в столбце - PullRequest
0 голосов
/ 12 марта 2020

enter image description here

Имя таблицы: L

В настоящее время я работаю с набором данных, который призван дать представление о случаях поддержки клиентов. В приведенном выше примере вы можете видеть ход дела 123376 от открытия до ответа.

Когда я использую функцию разбиения ROW_NUMBER() OVER (PARTITION BY L.CaseNumber, L.[Status], L.NextDate ORDER BY L.[Date] ASC), я получаю Row_Number, как указано выше. Тем не менее, после получения ответа о статусе дела и следующей дате NULL, я хочу удалить строки для этого дела, которые идут после, то есть я хочу сохранить только первую строку для Следующей даты NULL (в одном номер дела) и удалите остальные. Есть ли способ иметь номера строк над разделом, чтобы результат выглядел как этот или любой другой подход? enter image description here

Ответы [ 2 ]

1 голос
/ 12 марта 2020

Я думаю, вы должны рассмотреть случай, когда [Следующая дата] может варьироваться? Ниже приведен запрос окна, который помогает удалить все последовательные значения NULL из [Следующая дата], и на него никогда не влияет шаблон [Следующая дата].

with more as (
    select 
        L.*,
        case when
        LAG(L.[Next Date])
        over (
            partition by L.[CaseNumber]
            order by L.[Date], L.[Next Date]
        )
        is null then 1 end as [Last Is Null]
    from L
)
select * from more where more.[Next Date] is null and more.[Last Is Null] = 1

ПРИМЕЧАНИЕ: просто включите последнюю select * в delete, чтобы выполнить удаление.

1 голос
/ 12 марта 2020

Мне интересно, может ли следующее выражение делать то, что вы хотите - по крайней мере, я думаю, что оно должно работать для ваших образцов данных:

DENSE_RANK() OVER (
    PARTITION BY L.CaseNumber, L.[Status], L.NextDate 
    ORDER BY COALESCE(l.NexDate, L.[Date])
) 
...