У меня есть база данных, в которой я храню все транзакции, совершенные в игре. (Изображение БД) Теперь я хочу получить значение последней транзакции для каждого игрока.
я уже пробовал
SELECT MAX(timestamp), value, account_id FROM transactions GROUP BY account_id;. Здесь я получаю правильное время и account_id, но не правильное значение.
Можно ли решить эту проблему только с помощью SQL?
Это версия 5.7






select * from table
where id in (select MAX(id) from table group by account_id)
Это предполагает, что идентификаторы находятся в том же порядке, что и отметка времени. Это верно в большинстве случаев, но нет никаких гарантий.
@SalmanA, как я могу это исправить?
Вы можете использовать корреляцию, например. where timestamp = (select max(timestamp) from transactions as x where account_id = transactions.account_id)
В MySQL 8 или более поздней версии вы можете использовать для этого оконные функции:
with cte as (
select *, row_number() over (partition by account_id order by timestamp desc) as rn
from transactions
)
select *
from cte
where rn = 1
Спасибо!! К сожалению, моя версия MYSQL 5.7, и я не могу ее обновить.
Используйте комментарий под другим ответом.
Версия MySQL???