WITH q AS (
SELECT
balance.*,
CASE
WHEN busy_line=0 and min_left>500 THEN
CASE WHEN @q>1 OR @q is null THEN @q:=1 ELSE 1 END
WHEN busy_line=1 and min_left>500 THEN
CASE WHEN @q>2 OR @q is null THEN @q:=2 ELSE 2 END
WHEN busy_line=0 THEN
CASE WHEN @q>3 OR @q is null THEN @q:=3 ELSE 3 END
WHEN busy_line=1 THEN
CASE WHEN @q>4 OR @q is null THEN @q:=4 ELSE 4 END
END sel
FROM balance
WHERE client LIKE ?
)
select * from q where sel=@q ORDER BY min_left DESC