"SELECT l1 FROM Leilao l1 WHERE l1.lance = (SELECT MIN(l2.lance) FROM Leilao l2)"
Isso, por que, SELECT MIN (qualquer coisa), trará o menor dentre todos os qualquer coisa que você possuir.
Agora, se fizer SELECT [color=red]MAX(alguma coisa)[/color] você terá o maior dentre todos os alguma coisa.
"SELECT l1 FROM Leilao l1 WHERE l1.lance = (SELECT MIN(l2.lance) FROM Leilao l2)"
traz tudo o que existe em leilao, desde que o valor do lance seja o menor de todos os lances.
Creio que haja uma tabela onde você determine o lance mínimo do leilão, correto? Qual é esta tabela? Quais são suas colunas?
Isso traz apenas o menor lance de todos.
Você precisa de uma cláusula where que filtre qual menor lance você procura. Como descreveu, deseja o menor lance de cada usuário, logo, o filtro deve ser feito pela coluna que se refere ao usuário, certo?