A solução rownum falsa é inteligente, mas temo que não seja bem dimensionada (para consultas complexas, você precisa unir e contar em cada linha o número de linhas antes da linha atual).
Eu consideraria usar
create table tmp as select /*your query*/
.porque no caso de uma operação create as select o rowid criado ao inserir as linhas é exatamente o que seria o rownum (um contador). Ele é especificado pelo documento SQLite. Uma vez inserida a consulta inicial, basta consultar a tabela tmp:
select rowid, /* your columns */ from tmp
order by rowid