Tout d'abord, vous n'avez pas du tout besoin d'une troisième jointure. Vous pouvez effectuer votre calcul en une seule jointure :
from (select id
from owner
where date_format(auction_date,'%Y-%m-%d %H:%i:00') = date_format(NOW(),'%Y-%m-%d %H:%i:00')
) as a left join
(select owner_id, max(nb) as maxbid, max(mb) as maxautobi
from auction
group by owner_id
) b
on a.id=b.owner_id;
Obtention de la deuxième plus grande valeur pour mb
utilise ensuite une astuce, impliquant substring_index()
et group_concat()
:
from (select id
from owner
where date_format(auction_date,'%Y-%m-%d %H:%i:00') = date_format(NOW(),'%Y-%m-%d %H:%i:00')
) as a left join
(select owner_id, max(nb) as maxbid, max(mb) as maxautobi,
substring_index(substring_index(group_concat(mb order by mb desc), ',', 2), ',', -1
) as second_mb
from auction
group by owner_id
) b
on a.id=b.owner_id;
L'idée est de concaténer les valeurs ensemble, en les classant par mb
. Prenez ensuite le deuxième élément de la liste. Le seul inconvénient est que la valeur est convertie en une chaîne de caractères, même lorsqu'elle commence par un nombre.