-
Здравствуйте.
Есть таблица остатков по счетам за даты с полями 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 такого не нашел. Как поступить правильно? Можно ли получить остаток на дату одним запросом?
-
> Минус что приходится с сервера много данных тянуть
Можно и не тянуть, если разместить этот запрос в ХП
-
> [0] Barsky (29.02.08 09:29)
> 2 Вариант:
> Все хорошо, но в 2 запроса.
SELECT * FROM Table1 WHERE Account=... AND RestDate=(SELECT MAX(RestDate) WHERE Account=... AND RestDate<=... )
-
> [0] Barsky (29.02.08 09:29)
> У MySQL есть "Limit" позволяющий отобрать определенное число
> записей, в FireBird такого не нашел.
Или TOP или FIRST - заклинило, не могу вспомнить.
-
Сергей М., что такое ХП?
Sergey13, Спасибо, подозревал о варианте [2], но ниразу не пользовался такими конструкциями. Top и First тоже попробую.
Спасибо.
-
> Barsky (29.02.08 09:59) [4]
Хранимая процедура
-
Хорошо, но пока еще книжку не купил, а наугад не получится.
Спасибо.
-
> FireBird SQL
инструментарий сильно зависит от неуказанной версии
-
> книжку не купил, а наугад не получится
Наугад и не надо.
А материалы по FB можно найти в достаточном кол-ве на ibase.ru
-
> У MySQL есть "Limit" позволяющий отобрать определенное число
> записей,
Это вовсе не значит, что запрос не отработан полностью, т.е., что не обработаны все записи с получением отобранных. Просто это сделано на сервере, без закачки на клиента; траффик сэкономили, но и только...
-
Версия 2.0
Нашел оператор ROWS. Штука аналогичная LIMIT.
Разобрался с ХП.
Попробовал в ХП делать 1 запросом (С ROWS и без) и 2-мя (сначала MAX дата, а потом уже 1 запись). Скорость почти не отличается. 1 запросом быстрее.
-
> Barsky (03.03.08 17:03) [10]
Тихо сам с собою?
-
Может кому-нибудь еще пригодится, не сваливать же как только решил свою проблему =)
-
Это [11] я перегрелся. Это другому человеку, в другой форум, на другом сайте... :)
Забудь :)))
-
=)