Выберите запись на основе условия - PullRequest
0 голосов
/ 17 марта 2020

у меня 3 таблицы. Таблица 1 обновляется каждый раз, когда я загружаю файл. Таблица 2 представляет собой архивную таблицу, в которой хранятся записи во всех загруженных файлах. В таблице 3 после некоторых проверок сохраняются данные таблицы 2.

1-я загрузка файла:

Таблица 1:

RefNo   |   Code   |  ID 
--------+----------+-----
1234         30        1     
5678         40        2

Таблица 2:

RefNo   |   Code   |  ID
--------+----------+------
1234         30        1
5678         40        2

Загрузка второго файла

Таблица 1:

RefNo   |   Code   |  ID 
--------+----------+-----
1234         50        3     
5678         60        4

Таблица 2:

RefNo   |   Code   |  ID
--------+----------+------
1234         30        1
5678         40        2
1234         50        3     
5678         60        4

Загрузка третьего файла (код UPDATE = 100 для refno = 1234)

Таблица 1:

RefNo   |   Code   |  ID 
--------+----------+------
1234         100        5     

Таблица 2:

RefNo   |   Code   |  ID
--------+----------+------
1234         30        1
5678         40        2
1234         50        3     
5678         60        4
1234         100       5 

Теперь в таблице 2 есть 3 записи для 1234. Я хочу обновить код до 100 только в таблице 3 если последний загруженный код равен 0. Как выбрать последнюю загруженную запись?

SELECT * 
FROM table2 a 
JOIN table 1 b ON a.refno = b.refno 
WHERE a.id = (SELECT ???)

Я не знаю, как выбрать ID = 3 (последний загруженный), а не несколько идентификаторов.

1 Ответ

0 голосов
/ 17 марта 2020

если идентификаторы имеют тип int, вы можете использовать это, чтобы получить последнюю запись для всех refno в table1, которые существуют в table2. Затем вы можете отфильтровать их по мере необходимости:

select  t2.*
from    table2 t2
join    (           
            select  t2.RefNo,
                    MAX(t2.ID) lastId
            from    table2 t2
            JOIN    table1 t1 ON t2.RefNo = t1.RefNo 
            WHERE   t2.Id < t1.Id
            GROUP BY t2.RefNo
        ) ti        on t2.Id = ti.lastId
...