根据每个用户的不同值过滤值

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

我试图了解如何在MySQL中做我通常在python中做的事情。

我有一个销售表,其中sales_date,user_id和price_USD为列。每行都是用户下的订单。我想得到一个新表,其中包含所有订单的价格都比用户上次下单的价格高(因此在此图片中,只有黄色行)。

我知道如何获取每个用户的最后顺序的表,但是我无法将其保存在数据库中。如何通过user_id将每一行的价格与不同的值进行比较,然后一次获得较大的价格呢?

谢谢

enter image description here

mysql sql date greatest-n-per-group window-functions
1个回答
0
投票

如果运行的是MysL 8.0,则可以使用窗口功能执行此操作:

select t.*
from (
    select
        t.*,
        first_value(price_usd) 
            over(partition by user_id order by sale_date desc) last_price_usd
    from mytable t
) t
where lag_price_usd is null or price > last_price_usd

在较早的版本中,您可以使用相关子查询:

select t.*
from mytable t
where t.price_usd > (
    select price_usd
    from mytable t1
    where t1.user_id = t.user_id
    order by sale_date desc
    limit 1
)
© www.soinside.com 2019 - 2024. All rights reserved.