2016-06-18 44 views
0

我有以下的數據結構,我想寫一個查詢返回給定的訂單號,所有orderlineid與該訂單行的最新statusId。在子查詢中使用頂部

enter image description here

如果我是在一個特定的順序線只是有興趣,我可以用

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

,但我無法弄清楚如何讓所有給定的OrderId結果在一個SQL語句。

回答

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保留字,所以如果這是你真正的表名,你會需要圍繞它使用括號。但我建議將其重命名以使您的生活更輕鬆。

+0

哎呀,我同意這不是一張桌子的好名字。我把一個小型數據庫放在一起來說明我的問題。在生產數據庫中,表格被稱爲別的東西。 –