SQL запрос на вывод максимальной ставки сделанной пользователем по каждому лоту
Есть 4 таблицы, но к запросу относятся только 3:
CREATE TABLE user (
id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
register_date DATETIME NOT NULL,
email VARCHAR(150) NOT NULL UNIQUE,
name VARCHAR(200) NOT NULL,
password TEXT,
contact VARCHAR(200)
);
CREATE TABLE lot (
id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
date_create DATETIME,
title VARCHAR(150),
description TEXT(5000),
img VARCHAR(250),
price INT,
date_end DATE,
step SMALLINT,
id_user INT NOT NULL,
winner INT,
id_category INT NOT NULL
);
CREATE TABLE rate (
id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
date DATETIME,
amount INT NOT NULL,
id_user INT,
id_lot INT NOT NULL
);
Нужно вывести максимальную ставку по лотам в которых закончилась дата публикации "date_end", в тоже время нету победителя "winner". Победитель определяется максимальной ставкой на момент окончания действия лота. Ставка "amount" в таблице ставок "rate". Когда будет определен победитель в столбец "winner" записывается id пользователя, который сделал наибольшую ставку. Записываться скорее всего будет уже через PHP, в отдельном запросе. То есть нужно выбрать ставку, чтобы столбец "winner" таблицы "lot" был пустым, "date_end" таблицы "lot" был меньше текущего времени и ставка "amount" таблицы "rate" была наибольшей по этому лоту. Смог создать только такой запрос:
SELECT l.title, l.price, l.date_end, l.winner, r.amount, u.name, u.email FROM rate r
JOIN lot l ON r.id_lot = l.id
JOIN user u ON r.id_user = u.id
WHERE l.date_end < NOW() AND l.winner IS NULL
Не могу никуда вставить условие, про максимум, сколько не пытался не получается, то что то пишет про ORDER BY, то ошибки, в интернете сколько не искал про MAX ничего не работает. Выполнение запроса прикреплю картинку.
Получается у меня повторяется вывод ставок по каждому пользователю, но мне нужна именно максимальная ставка по лоту. Помогите пожалуйста составить запрос правильно, или понять, где у меня ошибки.
PS: Пока что пришел к такому запросу:
SELECT l.id, l.title, l.price, l.date_end, l.winner, MAX(r.amount) AS
max_amount, ANY_VALUE(u.name), ANY_VALUE(u.email) FROM rate r
JOIN lot l ON r.id_lot = l.id
JOIN user u ON r.id_user = u.id
WHERE l.date_end < NOW() AND l.winner IS NULL
GROUP BY l.id
но данные из таблицы user выводятся не правильные, как будто нет связи между таблицами rate и user. Не понимаю почему. Если убрать ANY_VALUE(), то пишет ошибку, что ему не понятно какие данные выбирать.
#1055 - Expression #7 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'yeticave.u.name' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by