在子查询中使用top

时间:2016-06-18 00:29:14

标签: tsql

我有以下数据结构,我想编写一个返回给定订单号的查询,所有orderlineid都包含该订单行的最新statusId。

enter image description here

如果我只对特定的订单行感兴趣,我可以使用

select top 1 StatusId from task where OrderLineId = @OrderLineId order by TaskId desc

但我无法弄清楚如何在一个SQL语句中获取给定OrderId的所有结果。

1 个答案:

答案 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中的保留字,所以如果这是你的真实表名,你需要在它周围使用括号。但我建议将其重命名以使您的生活更轻松。

相关问题