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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Mysql Query查找Purchase_history表中所购商品的最后交易日期相关的知识,希望对你有一定的参考价值。

表: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吗?

答案

试试这个:

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

确保item_id类型是整数。

另一答案

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

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提供多行。

另一答案

使用相关子查询:

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
);
另一答案

试试这个查询

select * from (select * from purchase_history order by purchase_date asc) purchase_history group by uid;

以上是关于Mysql Query查找Purchase_history表中所购商品的最后交易日期的主要内容,如果未能解决你的问题,请参考以下文章

如何查找MySQL中查询慢的SQL语句

如何查找MySQL中查询慢的SQL语句

如何查找MySQL中查询慢的SQL语句

JPA Query 通过 id 以外的参数查找

如何查找MySQL中查询慢的SQL语句

php mysql增删查改