2

order_status_data2 表

我正在尝试从上表(order_status_data2)中检索唯一值。我想使用以下字段获取最新订单:id,order_id 和 status_id。高 id 字段值表示最近的项目,即
4 - 56 - 4
8 - 52 - 6
7 - 6 - 2
9 - 8 - 2
等。
我尝试了以下查询,但没有得到想要的结果,尤其是 status_id 字段:

 select max(id) as id, order_id, status_id from order_status_data2 group by order_id

这是我得到的结果:
查询结果


我将如何制定查询以获得所需的结果?

4

3 回答 3

5
SELECT o.id, o.order_id, o.status_id
FROM order_status_data2 o
JOIN (SELECT order_id, MAX(id) maxid
      FROM order_status_data2
      GROUP BY order_id) m
ON o.order_id = m.order_id AND o.id = m.maxid

SQL小提琴

在您的查询中,您没有对 施加任何约束status_id,因此它从组中的任意行中选择它。选择max(id)不会使其status_id从恰好具有该值的行中进行选择,您需要一个连接来为所有非聚合列选择特定行。

于 2013-07-02T09:49:38.100 回答
3

像这样:

select d.*
from order_status_data2 d
join (select max(id) mxid from order_status_data2 group by order_id) s 
  on d.id = s.mxid
于 2013-07-02T09:49:12.837 回答
2

试试这个查询。这会帮助你

SELECT id ,orderid,statusid 
FROM table_name 
WHERE id IN
(
  SELECT max(id) FROM table_name GROUP BY orderid 
)
ORDER BY statusid 

你可以参考这个使用你的例子的Sql_Fiddle_link 。

于 2013-07-02T10:01:36.140 回答