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

Ответы (0 шт):