我有以下数据结构,我想编写一个返回给定订单号的查询,所有orderlineid都包含该订单行的最新statusId。
如果我只对特定的订单行感兴趣,我可以使用
select top 1 StatusId from task where OrderLineId = @OrderLineId order by TaskId desc
但我无法弄清楚如何在一个SQL语句中获取给定OrderId的所有结果。
答案 0 :(得分:1)
如果我正确理解您的问题,您可以在子查询中使用row_number
:
select orderid, orderlineid, statusid
from (
select o.orderid,
ol.orderlineid,
t.statusid,
row_number() over (partition by o.orderid order by t.taskid desc) rn
from order o
join orderline ol on o.orderid = ol.orderid
join task t on ol.orderlineid = t.orderlineid
) t
where orderid = ? and rn = 1
请注意,order
是sql server中的保留字,所以如果这是你的真实表名,你需要在它周围使用括号。但我建议将其重命名以使您的生活更轻松。