根据条件选择一条记录

时间:2020-03-17 17:54:32

标签: sql sql-server inner-join

我有3张桌子。每次我上传文件时,表1都会更新。表2是一个档案表,在所有上载的文件中存储记录。表3经过一些验证后存储了表2的数据。

第一次上传文件:

表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

上传第3个文件(refno = 1234,更新代码= 100)

表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。仅在最后一次上传的代码为0时,我才想将表3中的代码更新为100。如何选择最后一次上传的记录?

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

我不知道如何选择ID = 3(最后上传的ID)而不是多个ID。

1 个答案:

答案 0 :(得分:0)

如果id是int类型,则可以使用它来获取table2中存在的table1中所有refno的最后一条记录。然后,您可以根据需要过滤这些内容:

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
相关问题