Mysql Query查找Purchase_history表中所购商品的最后交易日期

问题描述 投票:1回答:4

表:purchase_history包含用户的所有详细信息

字段包括:id,uid,purchase_date,item_id,item_size,item_color

其中id是主键。

类似的uid有很多行。例如

id | uid |  purchase_date | item_id | item_size | item_color 
1  | 200 |  2016-10-22    | 1021    |  3        | red 
2  | 122 |  2016-08-02    | 21      |  1        | black  
3  | 200 |  2016-05-01    | 222     |  1        | blue    
4  | 101 |  2016-01-07    | 102     |  1        | red

所以现在我希望单个查询通过uid获取最后一个事务日期,item_id和uid组。我用下面的查询:

select uid, max(purchase_date), item_id from purchase_history group by uid;

它给了我正确的uid和购买日期,但是没有从最后一行中挑选商品ID。它来自第一排。有什么方法可以使用uid和purchase_date从最后一行找到项目ID吗?

mysql group-by
4个回答
2
投票

试试这个:

select uid, max(purchase_date) as date, item_id from purchase_history group by uid ORDER by date desc,item_id desc

确保item_id类型是整数。


2
投票

您可以在子查询中找到每个用户的最大购买日期,并将其与主表连接,如下所示:

select t1.uid, t1.purchase_date, t1.item_id
from purchase_history t1
inner join (
    select uid, max(purchase_date) purchase_date
    from purchase_history
    group by uid
) t2 on t1.uid = t2.uid
    and t1.purchase_date = t2.purchase_date;

注意:如果有多个最大日期的行,它将为uid提供多行。


0
投票

使用相关子查询:

SELECT uid, purchase_date, item_id
FROM purchase_history p1
WHERE purchase_date = (
    SELECT MAX(purchase_date)
    FROM purchase_history p2
    WHERE p2.uid = p1.uid
);

0
投票

试试这个查询

select * from (select * from purchase_history order by purchase_date asc) purchase_history group by uid;
© www.soinside.com 2019 - 2024. All rights reserved.