Форум: "Базы";
Текущий архив: 2008.08.31;
Скачать: [xml.tar.bz2];
ВнизПравильный запрос на FireBird SQL Найти похожие ветки
← →
Barsky (2008-02-29 09:29) [0]Здравствуйте.
Есть таблица остатков по счетам за даты с полями Account RestDate, в которых записаны счета и остатки по ним соответственно. Записи ведутся только при изменении остатка что может быть не ежедневно.
Задача получить остаток на любую дату.
Я знаю 2 варианта решения задачи но оба меня не устраивают:
1 Вариант:
SELECT * FROM Table1 WHERE Account=... AND RestDate<=... ORDER BY RestDate DESC
И берем первую запись.
Минус что приходится с сервера много данных тянуть.
2 Вариант:
SELECT MAX(RestDate) WHERE Account=... AND RestDate<=...
и уже зная дату последнего изменения делаем второй запрос:
SELECT * FROM Table1 WHERE Account=... AND RestDate=(Дата из предыдущего запроса)
Все хорошо, но в 2 запроса.
У MySQL есть "Limit" позволяющий отобрать определенное число записей, в FireBird такого не нашел. Как поступить правильно? Можно ли получить остаток на дату одним запросом?
← →
Сергей М. © (2008-02-29 09:33) [1]
> Минус что приходится с сервера много данных тянуть
Можно и не тянуть, если разместить этот запрос в ХП
← →
Sergey13 © (2008-02-29 09:36) [2]> [0] Barsky (29.02.08 09:29)
> 2 Вариант:
> Все хорошо, но в 2 запроса.
SELECT * FROM Table1 WHERE Account=... AND RestDate=(SELECT MAX(RestDate) WHERE Account=... AND RestDate<=... )
← →
Sergey13 © (2008-02-29 09:53) [3]> [0] Barsky (29.02.08 09:29)
> У MySQL есть "Limit" позволяющий отобрать определенное число
> записей, в FireBird такого не нашел.
Или TOP или FIRST - заклинило, не могу вспомнить.
← →
Barsky (2008-02-29 09:59) [4]Сергей М., что такое ХП?
Sergey13, Спасибо, подозревал о варианте [2], но ниразу не пользовался такими конструкциями. Top и First тоже попробую.
Спасибо.
← →
Сергей М. © (2008-02-29 10:11) [5]
> Barsky (29.02.08 09:59) [4]
Хранимая процедура
← →
Barsky (2008-02-29 10:27) [6]Хорошо, но пока еще книжку не купил, а наугад не получится.
Спасибо.
← →
Правильный_Вася (2008-02-29 10:59) [7]
> FireBird SQL
инструментарий сильно зависит от неуказанной версии
← →
Сергей М. © (2008-02-29 11:02) [8]
> книжку не купил, а наугад не получится
Наугад и не надо.
А материалы по FB можно найти в достаточном кол-ве на ibase.ru
← →
Johnmen © (2008-02-29 12:50) [9]
> У MySQL есть "Limit" позволяющий отобрать определенное число
> записей,
Это вовсе не значит, что запрос не отработан полностью, т.е., что не обработаны все записи с получением отобранных. Просто это сделано на сервере, без закачки на клиента; траффик сэкономили, но и только...
← →
Barsky (2008-03-03 17:03) [10]Версия 2.0
Нашел оператор ROWS. Штука аналогичная LIMIT.
Разобрался с ХП.
Попробовал в ХП делать 1 запросом (С ROWS и без) и 2-мя (сначала MAX дата, а потом уже 1 запись). Скорость почти не отличается. 1 запросом быстрее.
← →
Johnmen © (2008-03-03 17:06) [11]
> Barsky (03.03.08 17:03) [10]
Тихо сам с собою?
← →
Barsky (2008-03-03 17:08) [12]Может кому-нибудь еще пригодится, не сваливать же как только решил свою проблему =)
← →
Johnmen © (2008-03-03 17:12) [13]Это [11] я перегрелся. Это другому человеку, в другой форум, на другом сайте... :)
Забудь :)))
← →
Barsky (2008-03-03 17:13) [14]=)
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2008.08.31;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.005 c