powered by simpleCommunicator - 2.0.52     © 2025 Programmizd 02
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Вопрос знатокам SQL
6 сообщений из 6, страница 1 из 1
Вопрос знатокам SQL
    #32074866
p519446
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрый день, уважаемые знатоки!
Имеется таблица курсов валют с тремя полями:
exch_id smallint, exch_time timestamp, exch_value decimal(12,4).
Пользователь (бухгалтер и тп) вводит курс НЕ каждый день, и может вводить его вообще нерегулярно.
Задача: максимально быстро найти, какой был курс валюты xExch_Id на дату-время xDateTime (например, на позавчера), исходя из предпосылки, что пользователь его вводил на какой-то более ранний день, а вот на позавчера - не ввел.
Я решил упорядочить таблицу по двум полям, условно "ключ" можно записать так: exch_id + desc(exch_time) // время -- по убыванию, чтобы последние курсы были "наверху".
Вопрос-1: как указать такой ключ в IBase;
Вопрос-2: помнится, в Clipper'e и FoxPro есть возможность установить "мягкий поиск", при котором, если ключ в индексе НЕ будет найден, команда SEEK <Expr> "встанет" на запись с ближайшим бОльшим значением ключа. А это именно то, что мне надо в данном случае!
Есть ли такая же возможность в SQL ?

Извините за многословность!
Буду премного благодарен за ответ!
...
Рейтинг: 0 / 0
Вопрос знатокам SQL
    #32074869
Gold
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Привет.
А что за проблема? Пиши себе:
SELECT FIRST 1 * FROM YOUR_TABLE
WHERE EXCH_TIME<=:NEED_TIME
ORDER BY EXCH_TIME DESC
...
Рейтинг: 0 / 0
Вопрос знатокам SQL
    #32074873
p519446
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Хе! Дык ведь этот запрос:
SELECT FIRST 1 * FROM YOUR_TABLE
WHERE EXCH_TIME<=:NEED_TIME
ORDER BY EXCH_TIME DESC

НЕ БУДЕТ использовать индекс, там где-то в доках я читал, что знаки НЕРАВЕНСТВА (<, >, ...) не дают оптимизатору возможность использовать индекс!

А мне-то надо МАКСИМАЛЬНО быстро выдернуть курс на произвольную дату!
...
Рейтинг: 0 / 0
Вопрос знатокам SQL
    #32074928
Alexandr Kizchenko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Привет.

Гдето в Инете встречал:

таблица ex_date_begin, ex_date_end, ex_course (для одной валюты, если несколько - добавляешь тип)
ex_date_begin, ex_date_end - период, в котором действовал курс
создаешь уникальный идекс по ex_date_begin, ex_date_end
поиск - select ex_course from ex where ex_date_begin<d1 and ex_date_end>d1

сам этот способ не пробовал, насколько быстрый не знаю
...
Рейтинг: 0 / 0
Вопрос знатокам SQL
    #32075022
Gold
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не, ну я поражаюсь. А самим помотреть слабо? Этот запрос выполняет ОДНО индексированное чтение.
...
Рейтинг: 0 / 0
Вопрос знатокам SQL
    #32076044
Gold
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Забыл сказать. Для такого запроса нужен индекс по убыванию, т.к. двунаправленных индексоа в IB пока нет. По умолчанию индексы строятся по возрастанию, так что не удивляйся, если ORDER BY ... DESC всю таблицу перелопатит :-)
...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Вопрос знатокам SQL
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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