Você poderia criar outra tabela
User_warnings:
user_id
warn_timestamp
Sempre que o usuário for avisado , você primeiro exclui todas as entradas com mais de 30 dias e, em seguida, verifica se ainda existem dois ou mais avisos. Banir o usuário então.
Se você quiser um histórico de todos os avisos, não exclua os avisos antigos, mas apenas consulte os avisos dos últimos 30 dias.
Dessa forma, você não precisa decrementar todos os dias, mas apenas verificar quando aparece outro aviso.