从具有类似id数据字段的表中选择唯一数据

时间:2013-07-02 09:44:10

标签: mysql sql

order_status_data2 table

我正在尝试从上表中检索唯一值(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

这是我得到的结果:
query results


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

3 个答案:

答案 0 :(得分: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 Fiddle

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

答案 1 :(得分: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

答案 2 :(得分: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