Как выбрать не удаленные записи из таблицы истории? - PullRequest
0 голосов
/ 04 мая 2020

У меня есть таблица таблицы истории, где я храню все записи, независимо от того, вставлены они, обновлены или удалены. Я хочу выбрать только самую последнюю запись согласно приведенному ниже примеру. Ниже приведены две транзакции 23 и 24. Я хочу выбрать последнее обновление из 23 и пропустить 24, потому что оно было удалено в конце. Пожалуйста, напишите мне запрос.

Source:

Transaction  Flag   Date        
23            I    1/1/2020     
23            U    2/1/2020         I-Inserted
23            U    3/1/2020         U-Updated
23            U    4/1/2020         D-Deleted
24            I    1/1/2020     
24            U    2/1/2020     
24            D    3/1/2020     


Result:

Transaction  Flag      Date     
23            U    4/1/2020     

Ответы [ 2 ]

0 голосов
/ 04 мая 2020

Я не знаю, используете ли вы MySQL или SQL Сервер, но при условии, что MySQL 8+ или SQL Сервер, вот версия, которая должна работать:

SELECT "Transaction", Flag, Date
FROM
(
    SELECT *, ROW_NUMBER() OVER (PARTITION BY "Transaction" ORDER BY Date DESC) rn
    FROM yourTable
) t
WHERE rn = 1 AND Flag <> 'D';

Демонстрация

Демонстрация находится на SQL сервере, но базовый код c должен работать на любой базе данных, которая поддерживает ROW_NUMBER.

0 голосов
/ 04 мая 2020

Один метод использует коррелированные подзапросы:

select t.*
from t
where t.date = (select max(t2.date) from t t2 where t2.transaction = t.transaction) and
      t.flag <> 'D';
...