Fałszywe rozwiązanie rownum jest sprytne, ale obawiam się, że nie skaluje się dobrze (w przypadku złożonych zapytań musisz dołączyć i policzyć w każdym wierszu numer wiersza przed bieżącym).
Rozważałbym użycie create table tmp as select /*your query*/
.ponieważ w przypadku operacji create as select wierszid utworzony podczas wstawiania wierszy jest dokładnie tym, co byłoby rownum (licznikiem). Jest to określone w dokumentacji SQLite.
Po wstawieniu początkowego zapytania, wystarczy wysłać zapytanie do tabeli tmp:
select rowid, /* your columns */ from tmp
order by rowid