SQLite - 在 SQLite 3.25.0 之前实现等效的 row_number 和 window 结果

SQLite - Achieve equivalent row_number and window outcome in SQLite pre 3.25.0

附带 Android 的 SQLite 版本,最多为 3.19 - https://developer.android.com/reference/android/database/sqlite/package-summary

然而,最近,我倾向于执行row_number()window功能。但是,它仅在 3.25.0 之后才受支持 - https://www.sqlite.org/windowfunctions.html

我的目的是使用 row_number()window 函数实现以下目标 -

with cte as (
  select *, row_number() over win - 1 as rn from plain_note

  window win as (order by 
    title desc,
    case when type = 0 then body else searched_string end desc
  )    
)
update plain_note set "order" = (select rn from cte where "order" = plain_note."order");

但是,Android 中没有此类功能。我想知道,有没有办法在不使用 row_numberwindow 的情况下达到相同的结果?

它不优雅但很有效:

update plain_note 
set "order" = (
  select count(*) 
  from plain_note p 
  where p.title > plain_note.title 
  or ( 
    p.title = plain_note.title 
    and 
    case when p.type = 0 then p.body else p.searched_string end > 
    case when plain_note.type = 0 then plain_note.body else plain_note.searched_string end
  ) 
  or (
    p.title = plain_note.title 
    and 
    coalesce(case when p.type = 0 then p.body else p.searched_string end, '') = 
    coalesce(case when plain_note.type = 0 then plain_note.body else plain_note.searched_string end, '')
    and 
    p.rowid < plain_note.rowid 
  )
);