我想要针对每个用户和产品ID的唯一记录。所以我的查询工作正常,但是一个小问题是,我没有得到订单ID的列的确切值。
select max(o.id) as order_id, u.email,oi.product_id, DATE_FORMAT(FROM_UNIXTIME(o.paid_time), '%Y-%m-%d') as paid_times
from `order` o
join `users` u on u.id = o.user_id
join order_item oi on oi.order_id = o.id
where oi.product_id in (1212,1213)
group by u.email, oi.product_id
order by o.id desc;
尝试 - 2
select max(o.id) as order_id, u.email,oi.product_id, DATE_FORMAT(FROM_UNIXTIME(o.paid_time), '%Y-%m-%d') as paid_times
from `order` o
join `users` u on u.id = o.user_id
join order_item oi on oi.order_id = o.id
where oi.product_id in (1212,1213) and o.id IN (SELECT max(id) FROM `order`)
group by u.email, oi.product_id
order by o.id desc;
我获得了最大订单ID,这很好。但paid_time不是此订单ID。
当前结果:
期望的结果:
答案 0 :(得分:0)
这是一种非常常见的错误类型。首先,您需要获取最大订单ID,而不是使用它在where条件中使用select和其他列的最大值mysql为您提供最大订单ID和首先出现的任何行数据,而不是与max id相关的数据。
了解以下示例
SELECT name
FROM table
WHERE id=(
SELECT max(id) FROM table
)
上面的将为您提供表格中的max(id)数据
SELECT name , max(id)
FROM table
上述查询将显示最大ID但不匹配名称