2013-04-26 45 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