2013-04-26 46 views
2
ID OrderId status 
    1 12  1 
    2 13  1 
    3 14  2 
    4 12  3 
    5 15  1 
    6 14  1 

大家好,獲取使用排序的唯一記錄2008

試圖建立SQL查詢的表像上面得到結果如下圖所示:

OrderId status 
     12  3 
     13  1 
     14  1 
     15  1 

我想用獨特的OrderID最新的狀態代碼

我已經試過此查詢

Select Distinct OrderID 
from OrdersStatusHistory 
order by Status desc 

得到記錄,但有重複的OrderID

Select OrderID, Status 
from Orders_Status_History 
order by Status desc 

但我發現了一個錯誤:

ORDER BY items must appear in the select list if SELECT DISTINCT is specified.

回答

2
select OrdersStatusHistory.* from OrdersStatusHistory 
JOIN 
(select OrderId, max(id) maxId 
     from OrdersStatusHistory 
     group by OrderId) t1 
on OrdersStatusHistory.Id=t1.maxId 
order by OrdersStatusHistory.OrderId 

SQLFiddle demo

,或者如果你需要伸出了OrdeId

最大狀態
select OrderId,max(status) 
from OrdersStatusHistory 
group by OrderID 
order by OrderId 
1

你想要的結果是否錯誤? 14發生兩次,但最新狀態爲2

WITH CTE AS 
(
    SELECT RN = ROW_NUMBER()OVER(PARTITION BY OrderId ORDER BY ID DESC) , OrderId, status 
    FROM dbo.Orders 
) 
SELECT OrderId, status FROM CTE 
WHERE RN = 1 

DEMO

ORDERID STATUS 
12   3 
13   1 
14   1 
15   1 
+0

Ⅰ號要像結果顯示,但沒有得到。 – sharad 2013-04-26 08:28:01

+0

@sharad:但14發生兩次,最新的狀態是2不是1.(參見我的編輯) – 2013-04-26 08:30:09

+0

@MarkBannister:但是,OP在他的問題中已經明確表示他「希望**具有**最新狀態的獨特orderid **代碼「# – 2013-04-26 08:49:15

0

嘗試此查詢。

Select orderid 
,status 
from orders_status_history 
where rowid in (Select max(rowid) 
from orders_status_history 
group by orderid) order by order_id 
0

你一定要試試這個:

Select DISTINCT OrderID, Status from Orders_Status_History