Запрос sqlite на основе выбора из строки столбца и фильтрации по последним строкам в порядке убывания

У меня есть база данных tick_df, которая выглядит так

       timestamp                             time        symbol     price
0  1649320867903 2022-04-07 08:41:07.903000+00:00  LUNA/USD:USD  108.3220
1  1649320867884 2022-04-07 08:41:07.884000+00:00   SOL/USD:USD  115.9125
2  1649320867321 2022-04-07 08:41:07.321000+00:00  LUNA/USD:USD  108.3220
3  1649320866243 2022-04-07 08:41:06.243000+00:00  LUNA/USD:USD  108.3300
4  1649320866225 2022-04-07 08:41:06.225000+00:00  AVAX/USD:USD   84.6590
5  1649320866144 2022-04-07 08:41:06.144000+00:00  AVAX/USD:USD   84.6640

Я пытаюсь выбрать все столбцы и последние 2 строки в порядке убывания времени только из одного символа - например, AVAX/USD:USD. Запрос, который я пробовал,

SELECT symbol FROM tick_df WHERE symbol LIKE AVAX% ORDER BY timestamp DESC LIMIT2

Но это возвращает ошибку

sqlalchemy.exc.OperationalError: (sqlite3.OperationalError) near "ORDER": syntax error

может ли кто-нибудь указать, что я делаю неправильно здесь.

Спасибо

Вы должны заключить параметр LIKE в одинарные кавычки, попробуйте это SELECT symbol FROM tick_df WHERE symbol LIKE 'AVAX%' ORDER BY timestamp DESC LIMIT 2

Mattia Righetti 07.04.2022 11:50
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
1
1
23
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Если вы посмотрите на сообщение об ошибке, оно говорит вам, что рядом с ORDER BY есть синтаксическая ошибка, оно намекает на ошибку непосредственно перед этим предложением.

Как вы можете прочитать из документация:

A string constant is formed by enclosing the string in single quotes (').

Вы должны заключить LIKE arg в одинарные кавычки, как это

SELECT symbol FROM tick_df WHERE symbol LIKE 'AVAX%' ORDER BY timestamp DESC LIMIT 2

Кроме того, если вы хотите вернуть весь столбец, вы должны SELECT *, а не SELECT symbol, потому что последний вернет только столбец символов.

Окончательный правильный запрос должен быть

SELECT * FROM tick_df WHERE symbol LIKE 'AVAX%' ORDER BY timestamp DESC LIMIT 2

который хорошо работает, возвращая только символ столбца. Как я могу заставить его возвращать все столбцы базы данных, а не только символ?

DaveTheRave 07.04.2022 12:34

Он возвращает только столбец символов, потому что вы задали его с помощью SELECT symbol, если вы хотите вернуть все столбцы, которые вы должны использовать SELECT *

Mattia Righetti 07.04.2022 12:52

ваше здоровье. да я разобрался. db_name = "SELECT * FROM" + " " + ("tick_df") + " " + "WHERE symbol LIKE" + " " + "'%s'" % str(names[0] + "%") + " " + "ORDER BY timestamp DESC" + " " + "LIMIT" + " " + "2"

DaveTheRave 07.04.2022 12:54

Другие вопросы по теме