首页 > 解决方案 > 基于 ID 查找最新记录的 SQL 代码帮助

问题描述

这是我的旧问题后面的一个问题,因为我不清楚我在寻找什么。老问题可以在这里找到:需要知道这在 SQL 中是否可行

我有带有报价的销售订单,但是进行了新的报价修订,有时销售订单没有得到更新。所以我需要编写一个查询来查找任何没有最新报价的订单。

目前这是在 excel 中完成的,但我希望能够运行查询以获得相同的结果。

我的 SQL 或 SQL Server。

表和字段 销售订单行 - 销售订单 ID/当前报价 ID 报价 - 报价 ID

销售订单 ID 是一个数字字段 XXXXX。报价 ID 字段类似于 12345,如果创建了新修订,则会添加一个新报价并称为 12345-A,它会按每个修订的字母顺序上升。

示例数据

销售订单

omlSalesOrderID | omlQuoteID
53849           | 12345
31486           | 95648-A
12489           | 68745-D
68732           | 32149-E

引号

qmpQuoteID
12345   
12345-A 
12345-B 
95648   
95648-A 
95648-B 
95648-C 
68745   
68745-A 
68745-B 
68745-C 
68745-D 
32149   
32149-A 
32149-B 
32149-C 
32149-D 
32149-E 

我想看到的是

Sales order ID | Current Quote ID | Latest Quote ID
---------------|------------------|-----------------
53849          | 12345            | 12345-B
31486          | 95648-A          | 95648-C
12489          | 68745-D          | 68745-D
68732          | 32149-E          | 32149-E

标签: mysqlsqlsql-server

解决方案


在 MySQL 中,您可以使用substring_index()和聚合:

select o.quoteId, o.salesorderid,
       max(q.quote_id)
from orders o left join
     quotes q
     on o.quoteId = substring_index(q.quoteId, '-', 1)
group by o.quoteId;

在 SQL Server(或 MySQL)中,您可以LIKE用于比较:

select o.quoteId, o.salesorderid,
       max(q.quote_id)
from orders o left join
     quotes q
     on q.quoteId like concat(o.quoteId, '-%')
group by o.quoteId;

推荐阅读