Записывает отдельно от максимальной даты - PullRequest
0 голосов
/ 06 ноября 2019

enter image description here

Metal помогла мне написать SQL, как показано ниже

select id  
        , OrderDate
        , RejectDate
        , max(case when RejectDate = '1900-01-01' then '9999-12-31' else RejectDate end) as rSum
     from tableA
     group by id, OrderDate, RejectDate

Теперь я хотел бы найти все записи для неполного идентификатора нижемаксимальная дата отклонения для удаления их из таблицы преобразований

Ответы [ 2 ]

1 голос
/ 06 ноября 2019

Можно использовать row_number():

select 
    id,  
    OrderDate,
    RejectDate
from (
    select 
        t.*,
        row_number() over(
            partition by id
            order by case when RejectDate = '1900-01-01' then '9999-12-31' else RejectDate end desc
        ) rn
    from tableA t
) t
where rn > 1

Преимущество этого метода заключается в том, что он позволяет избежать агрегирования, что может привести к повышению производительности. Кроме того, вы можете легко превратить это в оператор delete, используя концепцию обновляемого CTE следующим образом:

with cte as (
    select 
        row_number() over(
            partition by id
            order by case when RejectDate = '1900-01-01' then '9999-12-31' else RejectDate end desc
        ) rn
    from tableA t
)
delete from cte where rn > 1
0 голосов
/ 06 ноября 2019

Это должно работать ...

SELECT *
FROM tableA t1
INNER JOIN (
    SELECT ID, MAX(RejectDate) as MaxRejectDate
    FROM tableA) t2 ON t1.ID = t2.ID
WHERE t1.RejectDate < t2.MaxRejectDate
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...