[psql] Есть ли хаки чтобы вытаскивать id соответствующий max(val)?

SCIF32

то есть есть таблица
create table (id , ref_id, value)
хочется иметь на выходе
select id /* соответствующий ряду с выбранным max(value)*/, max(value) from table group by ref_id
вроде задача - дикий боян, но ничего путного найти не получилось.
ЗЫ
способы с джойнами и субселектами не предлагать - и сам так умею

Sharp

А если строчек с таковым value несколько? Что тогда ты хочешь получить?

klyv

нету.

serega1604

А если строчек с таковым value несколько? Что тогда ты хочешь получить?
таблицу с ними?

Dasar

база какая?
ps
кошерное решение - это через аналитические функции (но их должна база держать)

Sharp

А что дальше с ними делать? Я не думаю, что это таблица представляет какой-либо интерес сама по себе.
Здесь варианта два, на мой взгляд. Либо эти записи как-то обрабатываются, тогда логичнее будет написать что-то типа

selec max(value) to max_value from table
update table set ...=... where value=%max_value%

Либо подразумевается, что такая запись гарантированно одна. Но тогда, какая принципиальная разница между id и value? При создании уникального индекса по value скорость работы запросов с join-ами будет ровно такой же.

SCIF32

база portgreslq,
нужных аналитических функций не нашел, зато нашел вот что:
User-Defined Aggregates.
адская штука и если будет желание, можно сделать то, что надо.

SCIF32

Либо подразумевается, что такая запись гарантированно одна. Но тогда, какая принципиальная разница между id и value? При создании уникального индекса по value скорость работы запросов с join-ами будет ровно такой же.
value естественно не уникальны.
ключ и именно он нужен, чтобы потом по нему отсортировать.
в идеале подразумевается, что берется минимальный, если с одним и темже value их несколько
( но в принципе на это условие забить).

SCIF32

спасибо, не видел такого. там даже есть подходящее решение, но работает только под оракл.
да, на всякий случай, чтобы камнями не кидали - в заголовке указана база )

al70

Я, типа, не шарю особо, но мне интересно — может кто-нибудь аргументировать почему так нельзя:
select value, a, b, c from t
where value = (select max(value) from t)

ы?

klyv

ЗЫ
способы с джойнами и субселектами не предлагать - и сам так умею
Может, поэтому?

sinet

А где у тебя группировка?
Оставить комментарий
Имя или ник:
Комментарий: