Фильтрация значений по разному значению для каждого пользователя - PullRequest
1 голос
/ 27 мая 2020

Я пытаюсь понять, как делать в mySQL то, что я обычно делаю в python.

У меня есть таблица продаж с столбцами sale_date, user_id и price_USD. Каждая строка представляет собой заказ, сделанный пользователем. Я хочу получить новую таблицу со всеми заказами, стоимость которых превышает стоимость последнего заказа, сделанного пользователем (на этом рисунке только желтые строки).

Я знаю, как получить таблицу с последний заказ для каждого пользователя, но я не могу сохранить его в базе данных. Как сравнить цену каждой строки с другим значением по user_id и получить только более крупные в одном 'sw oop'?

Спасибо

enter image description here

1 Ответ

1 голос
/ 27 мая 2020

Если вы используете 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
)
...