Конференция "Прочее" » Сложности с запросом
 
  • ага (03.04.08 23:18) [20]

    > nekepka   (03.04.08 23:08) [17]

    На дату смотрел? 15.07.02
  • ага (03.04.08 23:20) [21]
    Да и FB совсем-совсем не IB. Так что бегом на ibase.ru
  • nekepka (03.04.08 23:20) [22]

    > На дату смотрел?
    Ну тогда это ответ на "...с какой версии.." :)))
  • nekepka (03.04.08 23:24) [23]

    > ага   (03.04.08 23:20) [21]
    Да ходил, и не раз... Может плохо ходил... Не будем распыляться: я пока кроме варианта [10] не вижу ничего. Но как удручает вложенный запрос!!!
  • ага (03.04.08 23:25) [24]

    > nekepka   (03.04.08 23:20) [22]
    >
    >
    > > На дату смотрел?
    > Ну тогда это ответ на "...с какой версии.." :)))

    Угу... Счас. Вот как раз большие траблы с IN в FB 1.0 и были. А в статье говорится о IB,
    причем неизвестной версии.
  • ага (03.04.08 23:27) [25]

    > nekepka   (03.04.08 23:24) [23]

    нет ничего плохого во вложенном запросе.
  • nekepka (03.04.08 23:34) [26]

    > нет ничего плохого во вложенном запросе.
    Плохого нет - точно, раз в синтаксисе присутствует, просто думал, может чего не знаю, чего не дочитал, может можно пооптимальнее как-то...
     Большое Спасибо всем отозвавшимся!
  • kaif © (04.04.08 15:40) [27]
    Можно и с помощью запроса SELECT  к хранимой процедуре сделать.
    На любом IB заработает.

    Надеюсь одному VALUE у юзера соотвествует только один ID. Хотя это заработает в любом случае. По сути это эквивалент вложенного запроса.

    CREATE PROCEDURE PROCEDURE1
    RETURNS(VALUE INTEGER, USERID INTEGER)
    AS
    BEBIN
     FOR SELECT MIN(VALUE),USERID
     FROM  TABLE1
     GROUP BY USER_ID
     INTO :VALUE, :USERID
     DO BEGIN
       FOR SELECT ID FROM TABLE1 WHERE USERID=:USERID AND VALUE=:VALUE
       INTO :ID
       DO SUSPEND;
     END
    END
  • kaif © (04.04.08 15:41) [28]
    Извиняюсь, ID вернуть забыл:

    CREATE PROCEDURE PROCEDURE1
    RETURNS(ID INTEGER, VALUE INTEGER, USERID INTEGER)
    AS
    BEBIN
    FOR SELECT MIN(VALUE),USERID
    FROM  TABLE1
    GROUP BY USER_ID
    INTO :VALUE, :USERID
    DO BEGIN
      FOR SELECT ID FROM TABLE1 WHERE USERID=:USERID AND VALUE=:VALUE
      INTO :ID
      DO SUSPEND;
    END
    END

  • ага (04.04.08 15:52) [29]
    select min(value) as min_value, min(ID) as min_id, UserID
     from Table
       group by UserID



    =))
  • Kerk © (04.04.08 16:53) [30]

    > kaif ©   (04.04.08 15:41) [28]

    Скинь плиз контакты в почту или в аську, у тебя анкета слетела
  • Johnmen © (04.04.08 18:48) [31]

    > ага   (04.04.08 15:52) [29]

    Это про что?
  • ага (04.04.08 19:11) [32]

    > Johnmen ©   (04.04.08 18:48) [31]
    >
    >
    > > ага   (04.04.08 15:52) [29]
    >
    > Это про что?
    >

    Это про

    > Можно ли одним запросом получить минимальное значение Value
    > для каждого UserID, и при этом, в той же записи получить
    > значение ID, для которого и было выбрано это минимальное
    > Value.

    ...

    > И или хотя бы первую из них, если минимальных для одного
    > UserID несколько.


    Самый подходящий вариант - [29]
  • Johnmen © (04.04.08 19:14) [33]

    > ага   (04.04.08 19:11) [32]
    > Это про
    >> Можно ли одним запросом получить минимальное значение Value
    >> для каждого UserID, и при этом, в той же записи получить
    >> значение ID, для которого и было выбрано это минимальное
    >> Value.

    Кхм... Ты серьезно?
  • ага (04.04.08 19:21) [34]

    > Johnmen ©   (04.04.08 19:14) [33]

    А что не так? Автору же по барабану, какой именно ид

    > > И или хотя бы первую из них, если минимальных для одного
    > > UserID несколько.
  • Johnmen © (04.04.08 19:40) [35]

    > ага   (04.04.08 19:21) [34]
    > А что не так? Автору же по барабану, какой именно ид

    Какому такому барабану?
    > значение ID, для которого и было выбрано это минимальное Value.
  • ага (04.04.08 19:47) [36]

    > Johnmen ©   (04.04.08 19:40) [35]

    :-)
    В таблице 3 поля. Получается, что userid и value попадаются одинаковые, но с разным id.
    Если следовать
    > > значение ID, для которого и было выбрано это минимальное
    > Value.

    то мы и выберем все записи с минимальным value но разными id для каждого userid.
    Но! Читаем далее:

    > > > И или хотя бы первую из них, если минимальных для одного
    > > > UserID несколько.
    >

    Это жжж неспроста :) Так что выбираем min или max id и всех делов.
    Ну надо автору поле id в выборке, что поделаешь :-)
  • Johnmen © (04.04.08 20:05) [37]

    > ага   (04.04.08 19:47) [36]

    Бр-р-р... Какая ерунда...
    Рассмотри конкретный пример:
    ID VALUE USERID
    1  44      3
    2  55      4
    3  66      5
    4  99      5
    5  88      5
    6  66      5
    7  66      6
    8  11      8
    9  22      9

  • Johnmen © (04.04.08 20:06) [38]
    пардон, для ID=3 VALUE=77
  • ага (04.04.08 20:16) [39]

    > Johnmen ©   (04.04.08 20:05) [37]

    Проверял. Днем. Сейчас не на чем :)
    Но, следуя логике получим
    ID VALUE USERID
    1  44      3
    2  55      4
    6  66      5
    7  66      6
    8  11      8
    9  22      9
    -- ну как-то так.
 
Конференция "Прочее" » Сложности с запросом
Есть новые Нет новых   [134433   +22][b:0][p:0.001]