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