синтаксическая ошибка при использовании row_number в sqlite3 - PullRequest
0 голосов
/ 14 мая 2018

Я хочу удалить дубликаты с помощью функции row_number на основе Как получить уникальные записи на основе нескольких столбцов из таблицы .Но был заблокирован синтаксической ошибкой.Мой случай использования, как показано ниже: this is my table and it named demo

и мой sql, как показано ниже:

select demo.*, 
      row_number() over (partition by id order by creator desc) as rn 
from demo

, но он говорит мне:

возле "(": синтаксическая ошибка:

Я не знаю, что произошло, и я выполняю поиск, например Как использовать ROW_NUMBER в sqlite . К сожалению, я до сих пор не могувыясните, какую ошибку я совершаю. Все будет по достоинству.

Ответы [ 3 ]

0 голосов
/ 14 мая 2018

Используйте subquery вместо:

select d1.* 
from demo d1
where primarykey = (select d2.primarykey
                    from demo d2
                    where d2.id = d1.id
                    order by d2.creator desc
                    LIMIT 1);
0 голосов
/ 03 декабря 2018

SQLite поддерживает оконные функции , начиная с версии 3.25 , поэтому оригинальный запрос должен работать.

0 голосов
/ 14 мая 2018

Как уже упоминалось в комментариях, SQLite не поддерживает row_number() или другие оконные функции. Вы можете использовать коррелированный подзапрос:

select d.*
from demo d
where d.creator = (select max(d2.creator) from demo d2 where d2.id = d.id);

С индексом demo(id, creator) это часто дает лучшую производительность даже в базах данных, которые поддерживают row_number().

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...