Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2008.08.31;
Скачать: CL | DM;

Вниз

Правильный запрос на 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;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.009 c
15-1215778070
Vlad Oshin
2008-07-11 16:07
2008.08.31
Oracle. В таблице all_all_tables находятся названия всех таблиц?


3-1204634091
abhtr
2008-03-04 15:34
2008.08.31
Один Master <-> несколько Detail


2-1216804336
Step
2008-07-23 13:12
2008.08.31
Файлы


2-1216785438
Zergost
2008-07-23 07:57
2008.08.31
Фильтрация по полям?


4-1195407043
IGOR
2007-11-18 20:30
2008.08.31
Число страниц и копий, посылаемых на печать