Primeiro, você não precisa de uma terceira junção. Você pode fazer seu cálculo em uma junção:
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;
Obtendo o segundo maior valor para
mb
então usa um truque, envolvendo substring_index()
e 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;
A ideia é concatenar os valores juntos, ordenando por
mb
. Em seguida, pegue o segundo elemento da lista. A única desvantagem é que o valor é convertido em uma cadeia de caracteres, mesmo quando começa como um número.