【问题标题】:Select a record based on a condition根据条件选择记录
【发布时间】:2020-03-17 17:54:32
【问题描述】:

我有 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

第三个文件上传(更新代码=100,参考号 = 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 中 1234 有 3 条记录。如果上次上传的代码为 0,我想将表 3 中的代码更新为 100。如何选择上次上传的记录?

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

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

【问题讨论】:

  • table3的结构是什么样的
  • “最后上传的代码”在哪里?
  • 本例中最后上传的代码是50
  • ``` 表 3 RefNo |代码 |留言 | ID ```
  • 为什么最后上传的代码是 50 而不是 100

标签: sql sql-server inner-join


【解决方案1】:

如果 id 是 int 类型,您可以使用它来获取 table1 中存在于 table2 中的所有 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

【讨论】:

    猜你喜欢
    • 2016-05-01
    • 2018-06-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多