В итоге я использовал ответ от @mu, с некоторыми изменениями
В Android вы не можете использовать внутренние ORDER BY
операторы в UNION
, только один внешний ORDER BY
во всем наборе. Чтобы обойти это, я использовал тот факт, что SQLite на Android поддерживает внутренние запросы, выполнил каждый фактический выбор во внутреннем запросе, а затем выделил все строки из внутреннего запроса для объединения следующим образом:
SELECT * FROM (SELECT * FROM table WHERE some_key > 3 ORDER BY some_key ASC LIMIT X)
UNION
SELECT * FROM table WHERE some_key = 3
UNION
SELECT * FROM (SELECT * FROM table WHERE some_key < 3 ORDER BY some_key DESC LIMIT X)