Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Правильный запрос на 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]


> Минус что приходится с сервера много данных тянуть


Можно и не тянуть, если разместить этот запрос в ХП


Наверх

Титульная страница Поиск, карта сайта Написать письмо