На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! информация о разделе
user posted imageДанный раздел предназначается для обсуждения вопросов использования баз данных, за исключением составления запросов на SQL. Для этого выделен специальный раздел. Убедительная просьба - соблюдать "Правила форума" и не пренебрегать "Правильным оформлением своих тем". Прежде, чем создавать тему, имеет смысл заглянуть в раздел "Базы данных: FAQ", возможно там уже есть ответ.

Модераторы: Chow, Bas, MIF
  
> Помогите составить запрос
    Смотрите. У меня есть 3 таблицы состоящие из полей

    DocumentDate: Date
    Amount: integer

    Таблицы просто назовем
    table1
    table2
    table3


    Представим что в первой и второй таблице по миллиону записей, а в третей нет записей вобще!

    Задача такова:
    Нужно вытащить из них только 3 последнии даты! И к ним поля Amount
    Тоесть допустим
    table1.DocumentDate = 23.03.2014
    table1.DocumentDate = 23.01.2014
    table1.DocumentDate = 23.01.2013


    table2.DocumentDate = 23.02.2014


    Значит в ответе должны взять
    23.03.2014
    23.02.2014
    23.01.2014


    Вот как такое реализовать? Тоесть сравним все таблицы, и найдем только 3 существующие последние даты в них
      ExpandedWrap disabled
        SELECT TOP 3 aaa.DocumentDate
        FROM
        (SELECT DocumentDate
        FROM Table1
        UNION ALL
        SELECT  DocumentDate
        FROM Table2
        ) AS aaa
        ORDER By aaa.DocumentDate DESC
        ExpandedWrap disabled
          SELECT TOP 3 aaa.DocumentDate, aaa.Amount
          FROM
          (SELECT DocumentDate, Amount
          FROM Table1
          UNION ALL
          SELECT  DocumentDate, aaa.Amount
          FROM Table2
          ) AS aaa
          ORDER By aaa.DocumentDate DESC
          АААА, вон оно как...
          Тоесть и максимальное находить не надо значение.....
          Спасибо, сделаю так, посмотрю как на практике...
          Отпишусь

          Добавлено
          MIF :good: огромное спасибо!
          Сообщение отредактировано: treeS -
            Возникла трудность!
            Вот я составил запрос
            ExpandedWrap disabled
              SELECT TOP 3 CommonTable.DocumentDate, CommonTable.Amount, Customer.NameFull
              FROM
                   (
                       SELECT DocumentDate, Amount, CustId, UserKey  FROM ViewMBSCPayDocRu WHERE PayerAccount = :Account
                       UNION ALL
                       SELECT  DocumentDate, Amount, CustId, UserKey FROM ViewMBSCPayDocSalary WHERE PayerAccount = :Account
                       UNION ALL
                       SELECT  DocumentDate, Amount, CustId, UserKey FROM ViewMBSCPayDocPens WHERE PayerAccount = :Account
                       UNION ALL
                       SELECT  DocumentDate, Amount, CustId, UserKey FROM ViewMBSCPayDocSoc WHERE PayerAccount = :Account
                       UNION ALL
                       SELECT  DocumentDate, Amount, CustId, UserKey FROM ViewMBSCPayDocTax  WHERE PayerAccount = :Account
                       UNION ALL
                       SELECT  DocumentDate, Amount, CustId, UserKey FROM ViewMBSCPayDocCur WHERE PayerAccount = :Account
                       UNION ALL
                       SELECT  DocumentDate, AmountDebet as Amount, CustId, UserKey FROM ViewMBSCCurrConversion WHERE AccountDebet = :Account
                       UNION ALL
                       SELECT  DocumentDate, AmountDebet as Amount, CustId, UserKey FROM ViewMBSCCurrBuy WHERE AccountDebet = :Account
                       UNION ALL
                       SELECT  DocumentDate, AmountDebet as Amount, CustId , UserKey FROM ViewMBSCCurrSell WHERE AccountDebet = :Account
                   ) AS CommonTable, Customer
               
              WHERE
                 Customer.CustId = CommonTable.CustId AND CommonTable.UserKey = :UserKey
               
              ORDER By CommonTable.DocumentDate  DESC


            Он отлично работает в SyBase.

            Но вобщем у нас в системе используются предкомпилированные SQL....
            Тоесть это SQL который отработает на любой СУБД!

            И вот он ругается на TOP 3, и на то что в FROM нельзя использовать такую структуру....
            Можно ли как то изменить его но что бы был тот же результат и работал во всех СУБД?
              Цитата treeS @
              у нас в системе используются ... он ругается

              Ну так приведите в соответствие синтаксис!
                как? Я не знаю как
                  У каждой СУБД свои закидоны в части синтаксиса. Либор корректируйте для конкретной СУБД, либо переписывайте с использованием только конструкций, котрые понимает любая из возможных СУБД. Т.е. определите, какой из стандартов поддерживается всеми вашими СУБД, и пилите в рамках этого стандарта.
                    ВОТ!!! Это я и спрашиваю как переписать для всех?
                    Но к меня возникла идея с View таблицей

                    Добавлено
                    Все, получилось сделать с View таблицей,Создал View таблицу с
                    ExpandedWrap disabled
                       


                    И использовал ее, так работает
                    Сообщение отредактировано: treeS -
                      Сначала определите перечень используемых СУБД - включая версии. Потом - общий для них стандарт. Только после этого можно будет думать, что надо менять и что можно использовать.
                      А декларации - штука бессмысленная.

                      Добавлено
                      Кстати, а почему у Вас одна сущность - документ о двитжении денежных средств - размазана по десятку таблиц?
                        1. У нас система принимает только предкомпелированные SQL через ODBC драйвер. И все, это не обойти ( Но спасибо я уже использовал View таблицу, они универсальны для всех )


                        Цитата
                        Кстати, а почему у Вас одна сущность - документ о двитжении денежных средств - размазана по десятку таблиц?

                        Ну так было задумано в головном офисе в Москве. Я могу только брать от туда значения. Изменять я ничего не имею право.
                          Цитата treeS @
                          У нас система принимает только предкомпелированные SQL через ODBC драйвер.

                          Значит, смотрите описание на драйвер. Ну чё как дети-то...
                            Akina Вас не смущает то что я уже сделал?)))))
                              Не-а... решение проблем методом научного тыка - это просто откладывание их "на потом". Например
                              Цитата treeS @
                              я уже использовал View таблицу, они универсальны для всех

                              это проверено по документации, или просто "вроде не сбоячит"?
                                Цитата Akina @
                                Не-а... решение проблем методом научного тыка - это просто откладывание их "на потом". Например
                                Цитата treeS @
                                я уже использовал View таблицу, они универсальны для всех

                                это проверено по документации, или просто "вроде не сбоячит"?

                                Проверено 16 летним опытом работы этой системы :)
                                0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                                0 пользователей:


                                Рейтинг@Mail.ru
                                [ Script execution time: 0,0377 ]   [ 15 queries used ]   [ Generated: 29.03.24, 06:15 GMT ]