我正在尝试从上表中检索唯一值(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
这是我得到的结果:
我如何制定查询以获得所需的结果?
答案 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
在您的查询中,您没有对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。