O que você está fazendo é válido - ele ordenará os resultados em ordem decrescente por
a
mas randomize a ordem dos empates. No entanto, para fazer o que você deseja, você precisa primeiro usar uma subconsulta para obter os 100 registros mais recentes e depois classificar os resultados dessa subconsulta aleatoriamente usando uma consulta externa:
SELECT * FROM
(
SELECT * FROM table1
ORDER BY date DESC
LIMIT 100
) T1
ORDER BY RAND()