powered by simpleCommunicator - 2.0.38     © 2025 Programmizd 02
Форумы / SQLite [игнор отключен] [закрыт для гостей] / Максимальное значение
10 сообщений из 10, страница 1 из 1
Максимальное значение
    #38192078
OlegSkal
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день!

Новичек в SQL.
Помогите плиз с банальным вопросом.
Суть вопроса: нужно получить из списка значений максимальное значение, меньшее или равное чем введенное наиболее быстрым способом.

Например:
есть числа 1,2,4,2,6,4,5,8,9
я ввожу 7 - прога выводит 6
я ввожу 4 - прога выводит 4

Конкретнее:
Оговорюсь сразу запросы рабочие и проверенные.
Есть такая таблица A (например):
CREATE TABLE IF NOT EXISTS [A] ([Date] INTEGER PRIMARY KEY, [Result] TEXT);
Вот запрос который реально работает (123 - число для примера):
SELECT [Result] FROM [A] WHERE [Date] <= 123 ORDER BY [Date] DESC LIMIT 1;

можно ли ускорить получение заветного числа?
Спасибо наперед :)
...
Рейтинг: 0 / 0
Максимальное значение
    #38192088
OlegSkal
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
OlegSkal,

Чуток неправильно привел пример.
значения [Date] постоянно растут
...
Рейтинг: 0 / 0
Максимальное значение
    #38192149
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Прочитать вот этот пост: 13601944
В букваре прочитать шестую главу.
Забыть про слово LIMIT и никогда его не использовать.
...
Рейтинг: 0 / 0
Максимальное значение
    #38192190
OlegSkal
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо! (((((((((
Накидал такое, но скорость ни на каплю не увеличилась
Дело в том что выполняется не один а очень много однотипных запросов
SELECT [Result],MAX([Date]) FROM [A] WHERE [Date] <= 123;
...
Рейтинг: 0 / 0
Максимальное значение
    #38192308
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А тебя не смутило что вторая колонка результата содержит одно и тоже во всех строках?
Вот этот запрос:
SELECT [Result],MAX([Date]) FROM [A] WHERE [Date] <= 123;
Означает: Дай мне все Result у которых Date меньше или равна 123, для каждой строки результата покажи максимальную дату по всей таблице.

Прочитай шестую главу еще раз.
И не надо брать имена колонок в квадратные скобки, SQLite это не Access.
...
Рейтинг: 0 / 0
Максимальное значение
    #38192316
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ой, прошу прощения. Кажется я соврал.
У тебя всего одна строка должна быть в результате.

Запрос
SELECT MAX([Date]) FROM [A] WHERE [Date] <= 123;
Правильный. Выдаст максимальное [Date] которое меньше или равно 123.
При работе этот запрос прошерстит всю таблицу. Если хочешь его ускорить то надо создавать индекс на поле [Date].
...
Рейтинг: 0 / 0
Максимальное значение
    #38193864
fd00ch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
White OwlЕсли хочешь его ускорить то надо создавать индекс на поле [Date].у него и так PRIMARY KEY

возможно, запрос все же быстро выполняется, но ТС:
- мудрит с действительно многократным его вызовом, хотя можно выудить все данные одним бОльшим запросом
- данных в таблице мегадофига
- кеш невелик
...
Рейтинг: 0 / 0
Максимальное значение
    #38193870
fd00ch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
еще вариант - попробовать сделать индекс с обратной сортировкой
Код: sql
1.
CREATE TABLE [A] ([Date] INTEGER PRIMARY KEY DESC, [Result] TEXT);
...
Рейтинг: 0 / 0
Максимальное значение
    #38198861
Фотография PPA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
White Owl,

Почему никогда нельзя использовать LIMIT?
...
Рейтинг: 0 / 0
Максимальное значение
    #38199227
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PPAWhite Owl,

Почему никогда нельзя использовать LIMIT?Накладные расходы велики.
limit имеет смысл только с сортировкой, а сортировка требует времени и памяти. Простой field<constant намного быстрее работает.
А задавать limit без order by это получать случайный набор строк. Это имеет смысл только на этапе разработки, когда надо просто посмотреть на типы данных которые могут быть получены рассматриваемым запросом.
...
Рейтинг: 0 / 0
10 сообщений из 10, страница 1 из 1
Форумы / SQLite [игнор отключен] [закрыт для гостей] / Максимальное значение
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]