Конференция "Базы" » Правильный запрос на FireBird SQL
 
  • Barsky (29.02.08 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 такого не нашел. Как поступить правильно? Можно ли получить остаток на дату одним запросом?
  • Сергей М. © (29.02.08 09:33) [1]

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


    Можно и не тянуть, если разместить этот запрос в ХП
  • Sergey13 © (29.02.08 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 © (29.02.08 09:53) [3]
    > [0] Barsky   (29.02.08 09:29)
    > У MySQL есть "Limit" позволяющий отобрать определенное число
    > записей, в FireBird такого не нашел.

    Или TOP или FIRST - заклинило, не могу вспомнить.
  • Barsky (29.02.08 09:59) [4]
    Сергей М., что такое ХП?

    Sergey13, Спасибо, подозревал о варианте [2], но ниразу не пользовался такими конструкциями. Top и First тоже попробую.

    Спасибо.
  • Сергей М. © (29.02.08 10:11) [5]

    > Barsky   (29.02.08 09:59) [4]


    Хранимая процедура
  • Barsky (29.02.08 10:27) [6]
    Хорошо, но пока еще книжку не купил, а наугад не получится.

    Спасибо.
  • Правильный_Вася (29.02.08 10:59) [7]

    > FireBird SQL

    инструментарий сильно зависит от неуказанной версии
  • Сергей М. © (29.02.08 11:02) [8]

    > книжку не купил, а наугад не получится


    Наугад и не надо.
    А материалы по FB можно найти в достаточном кол-ве на ibase.ru
  • Johnmen © (29.02.08 12:50) [9]

    > У MySQL есть "Limit" позволяющий отобрать определенное число
    > записей,

    Это вовсе не значит, что запрос не отработан полностью, т.е., что не обработаны все записи с получением отобранных. Просто это сделано на сервере, без закачки на клиента; траффик сэкономили, но и только...
  • Barsky (03.03.08 17:03) [10]
    Версия 2.0

    Нашел оператор ROWS. Штука аналогичная LIMIT.
    Разобрался с ХП.
    Попробовал в ХП делать 1 запросом (С ROWS и без) и 2-мя (сначала MAX дата, а потом уже 1 запись). Скорость почти не отличается. 1 запросом быстрее.
  • Johnmen © (03.03.08 17:06) [11]

    > Barsky   (03.03.08 17:03) [10]

    Тихо сам с собою?
  • Barsky (03.03.08 17:08) [12]
    Может кому-нибудь еще пригодится, не сваливать же как только решил свою проблему =)
  • Johnmen © (03.03.08 17:12) [13]
    Это [11] я перегрелся. Это другому человеку, в другой форум, на другом сайте... :)
    Забудь :)))
  • Barsky (03.03.08 17:13) [14]
    =)
 
Конференция "Базы" » Правильный запрос на FireBird SQL
Есть новые Нет новых   [134431   +15][b:0][p:0.001]