为每个用户选择最后一个条目

时间:2015-01-30 10:32:30

标签: mysql sql greatest-n-per-group

我有一个带有字段的TABLE user_orders - >

  • order_id int(10),
  • user_id int(10),
  • order_payment_id int(10)
  • order_created int(10)

我想找到每个user_id使用的最后一个order_payment_id。我试试

SELECT order_payment_id, user_id , MAX(order_id) as lastone
FROM user_orders 
GROUP BY user_id;

但结果是错误的

3 个答案:

答案 0 :(得分:6)

您可以使用自联接来过滤掉相关数据

SELECT o1.*
FROM user_orders o1
JOIN
(
   SELECT user_id, MAX(order_created) as lastone 
   FROM user_orders
   GROUP BY user_id
) o2 on o1.user_id = o2.user_id 
    and o1.order_created = o2.lastone
GROUP BY o1.user_id

答案 1 :(得分:0)

MAX应位于WHERE子句中,否则将为整个表格选择最大order_id

SELECT order_payment_id, user_id ,order_id as lastone
FROM user_orders u1
WHERE  u1.order_id = (SELECT MAX(order_id)
                      FROM user_orders u2
                      WHERE u1.user_id = u2.user_id);

使用此查询,除GROUP BY不唯一外,您可以删除order_id

这样您就可以获得与用户关联的最后一个订单。

答案 2 :(得分:0)

一般的GROUP BY规则是: 如果指定了GROUP BY子句,则SELECT列表中的每个列引用都必须标识分组列或者是set函数的参数。

SELECT order_payment_id, user_id , order_id as lastone
FROM user_orders uo
WHERE order_id = (select MAX(order_id) from user_orders
                  where user_id = uo.user_id)