Конференция "Прочее" » Сложности с запросом
 
  • nekepka (03.04.08 22:13) [0]
    Не знаю куда отправить. FireBird, таблица в три поля: ID (Primary Key, автоинкремент на генераторах-тригерах), Value (целое), UserID (целое). Можно ли одним запросом получить минимальное значение Value для каждого UserID, и при этом, в той же записи получить значение ID, для которого и было выбрано это минимальное Value. Без вложенных запросов. Очень нужно.
     Без ID все понятно
    select min(value) as min_value, UserID
    from Table
    group by UserID

     Но как узнать, какая запись содержит это минимальное значение? И или хотя бы первую из них, если минимальных для одного UserID несколько. Заранее спасибо.
  • oldman © (03.04.08 22:16) [1]

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


    О сортироке слышал?
  • nekepka (03.04.08 22:18) [2]

    > О сортироке слышал?
    И о фильтрации, но как это мне поможет?
  • ага (03.04.08 22:21) [3]

    > nekepka   (03.04.08 22:18) [2]

    select first (1) bla-bla from bla-bla where bla-bla
    order by id desc
  • oldman © (03.04.08 22:23) [4]

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


    Сортировка не меняет их местами.
    Первая в выборке и есть первая в базе.
  • Johnmen © (03.04.08 22:25) [5]

    > nekepka   (03.04.08 22:13) 

    Без вложенного запроса никак.
  • nekepka (03.04.08 22:27) [6]
    Да чтож вы на последней части-то сосредоточились.

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

  • ага (03.04.08 22:32) [7]

    > nekepka   (03.04.08 22:27) [6]
    >
    > Да чтож вы на последней части-то сосредоточились.

    см. [5]
  • Prohodil Mimo © (03.04.08 22:39) [8]
    ага   (03.04.08 22:21) [3]
    ему надо минимальное, а не максимальное, и не id, а value

    если я правильно понял, то так:

    select first 1 value as min_value, UserID, Id
    from Table
    order by value

  • Prohodil Mimo © (03.04.08 22:41) [9]
    но мой вариант только для одной записи, если надо для каждого, то без вложенных никак, или ХП.
  • nekepka (03.04.08 22:42) [10]

    > Без вложенного запроса никак.

    Это, что, как-то так:

    select T1.*
    from MyTable T1
    WHERE
     T1.Value in
       (
       select min(T2.Value)
       from MyTable T2
       where
         T2.UserID = T1.UserID
       )
    order by T1.Value

  • Johnmen © (03.04.08 22:46) [11]

    > nekepka   (03.04.08 22:42) [10]

    Как-то так. Только не in, а =
  • nekepka (03.04.08 22:52) [12]

    > Как-то так. Только не in, а =
    Да, только ведь оно "целое", которое Min, поэтому в подселекте может быть и не одна запись, кроме того, буквально на днях, и именно для FireBird, прочитал, что в случае с IN, планы строятся пооптимальнее.
  • Johnmen © (03.04.08 22:55) [13]

    >  поэтому в подселекте может быть и не одна запись,

    Да ты что?
    :)))

    >  и именно для FireBird, прочитал, что в случае с IN, планы
    > строятся пооптимальнее.

    Пооптимальнее чего?
  • ага (03.04.08 23:01) [14]

    > в случае с IN, планы строятся пооптимальнее.

    Нифига себе... Это с какой версии??
  • kaif © (03.04.08 23:01) [15]
    А так нельзя?

    select first 1 min(value), UserID
    from Table
    group by UserID
    order by 1
  • ага (03.04.08 23:03) [16]

    > kaif ©   (03.04.08 23:01) [15]
    >
    > А так нельзя?

    Неа. ID еще надо.
  • nekepka (03.04.08 23:08) [17]

    > ага   (03.04.08 23:01) [14]

    Что прочитал, то и озвучил. Может быть зря?
    http://www.interface.ru/fset.asp?Url=/borland/nihvop.htm
  • nekepka (03.04.08 23:11) [18]

    > ага   (03.04.08 23:03) [16]
    Именно ;)
  • Johnmen © (03.04.08 23:12) [19]
    Это не твой случай.
    Впрочем, никто не мешает сравнить реальные планы.
 
Конференция "Прочее" » Сложности с запросом
Есть новые Нет новых   [134433   +21][b:0][p:0.002]