-
Не знаю куда отправить. FireBird, таблица в три поля: ID (Primary Key, автоинкремент на генераторах-тригерах), Value (целое), UserID (целое). Можно ли одним запросом получить минимальное значение Value для каждого UserID, и при этом, в той же записи получить значение ID, для которого и было выбрано это минимальное Value. Без вложенных запросов. Очень нужно. Без ID все понятно select min(value) as min_value, UserID
from Table
group by UserID
Но как узнать, какая запись содержит это минимальное значение? И или хотя бы первую из них, если минимальных для одного UserID несколько. Заранее спасибо.
-
> Но как узнать, какая запись содержит это минимальное значение? > И или хотя бы первую из них, если минимальных для одного > UserID несколько.
О сортироке слышал?
-
> О сортироке слышал? И о фильтрации, но как это мне поможет?
-
> nekepka (03.04.08 22:18) [2]
select first (1) bla-bla from bla-bla where bla-bla order by id desc
-
> И или хотя бы первую из них, если минимальных для одного > UserID несколько. Заранее спасибо.
Сортировка не меняет их местами. Первая в выборке и есть первая в базе.
-
> nekepka (03.04.08 22:13)
Без вложенного запроса никак.
-
Да чтож вы на последней части-то сосредоточились.
> Можно ли одним запросом получить минимальное значение Value > для каждого UserID, и при этом, в той же записи получить > значение ID, для которого и было выбрано это минимальное > Value
-
> nekepka (03.04.08 22:27) [6] > > Да чтож вы на последней части-то сосредоточились.
см. [5]
-
ага (03.04.08 22:21) [3]ему надо минимальное, а не максимальное, и не id, а value если я правильно понял, то так: select first 1 value as min_value, UserID, Id
from Table
order by value
-
но мой вариант только для одной записи, если надо для каждого, то без вложенных никак, или ХП.
-
> Без вложенного запроса никак.
Это, что, как-то так:
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
-
> nekepka (03.04.08 22:42) [10]
Как-то так. Только не in, а =
-
> Как-то так. Только не in, а = Да, только ведь оно "целое", которое Min, поэтому в подселекте может быть и не одна запись, кроме того, буквально на днях, и именно для FireBird, прочитал, что в случае с IN, планы строятся пооптимальнее.
-
> поэтому в подселекте может быть и не одна запись,
Да ты что? :)))
> и именно для FireBird, прочитал, что в случае с IN, планы > строятся пооптимальнее.
Пооптимальнее чего?
-
> в случае с IN, планы строятся пооптимальнее.
Нифига себе... Это с какой версии??
-
А так нельзя?
select first 1 min(value), UserID from Table group by UserID order by 1
-
> kaif © (03.04.08 23:01) [15] > > А так нельзя?
Неа. ID еще надо.
-
-
> ага (03.04.08 23:03) [16] Именно ;)
-
Это не твой случай. Впрочем, никто не мешает сравнить реальные планы.
|