Поддерживается ли функция ранга в python sqlite3 - PullRequest
1 голос
/ 28 марта 2019

Мне интересно, поддерживает ли библиотека python sqlite3 функцию RANK ().

Когда я выполняю запрос через Интернет Sqlite Браузер, он работает нормально, но через python он не работает.

File "xyz.py", line 509, in createData
    conn.execute('SELECT RANK() OVER ( ORDER BY dateAndTime)  FROM xyz;')
sqlite3.OperationalError: near "(": syntax error

Заранее спасибо!

Ответы [ 3 ]

0 голосов
/ 28 марта 2019

Другая альтернатива - использовать row_number () вместо:

row_number()  

в сочетании с восходящим (ASC) или убывающим (DESC), чтобы получить отсортированный рейтинг

ORDER BY DESC # or ASC 

Также это может быть полезно при работе с sqlite в python http://www.sqlitetutorial.net/sqlite-window-functions/sqlite-row_number/

0 голосов
/ 29 марта 2019

Шон указал, что моя библиотека слишком старая.Br

Sqlite получил оконные функции в 3.25, поэтому вы должны использовать это или новее.

0 голосов
/ 28 марта 2019

Я не знаю, поддерживает ли версия SQLite, которую использует ваш скрипт Python, RANK(). Предполагая, что это не так, вот запрос, который вы можете использовать в качестве обходного пути:

SELECT
    (SELECT COUNT(*) + 1 FROM yourTable t2
     WHERE t2.id < t1.id) rnk
FROM yourTable t1
ORDER BY
    dateAndTime;

Мы можем использовать коррелированный подзапрос для обработки логики ранга. Обратите внимание, что для DENSE_RANK это может быть не так просто обойти.

Вот демонстрация, показывающая, что моя логика и RANK ведут себя одинаково.

Демо

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