Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Выборка предпоследнего значения / 4 сообщений из 4, страница 1 из 1
01.07.2008, 18:09
    #35405047
R4z0R
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выборка предпоследнего значения
Есть значения поля numid со значениями 23, 47, 225, 2370 для одного пользователя с id=21
Как составить запрос чтобы выбиралось предыдущее от максимального значеня поля numid?
Что-то типа
Код: plaintext
SELECT preMAX(numid) WHERE id= 21 
...
Рейтинг: 0 / 0
01.07.2008, 18:23
    #35405079
pamir
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выборка предпоследнего значения
Код: plaintext
select min(numid) from (SELECT numid WHERE id= 21  order by numid desc limit  2 ) as subqry
...
Рейтинг: 0 / 0
02.07.2008, 12:24
    #35406147
diq
diq
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выборка предпоследнего значения
Можно ещё и свою агрегатную функцию написать
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
create type second_max_int_state as (m int, pm int);

create or replace function second_max_sfunc(second_max_int_state, int)
returns second_max_int_state language sql as $$select
case
  when $ 1 .m is null then ($ 2 , null)::second_max_int_state
  when $ 1 .m<$ 2  then ($ 2 , $ 1 .m)::second_max_int_state
  when ($ 1 .pm<$ 2  or $ 1 .pm is null) and $ 1 .m>$ 2  then ($ 1 .m, $ 2 )::second_max_int_state
  else $ 1 
end
$$;

create or replace function second_max_ffunc(second_max_int_state)
returns int language sql as $$select $ 1 .pm$$;

create aggregate second_max (int) (
  SFUNC=second_max_sfunc, STYPE=second_max_int_state, FINALFUNC=second_max_ffunc
);

--test--
create temp table t as
select * from (values ( 1 , 1 ),( 2 , 20 ),( 1 , 2 ),( 1 , 3 ),( 1 , 4 ),( 2 , 5 ),( 2 ,- 1 ),( 3 , 0 ),( 2 , 20 )) v(a,b);

select a,b from t order by  1 , 2 ;

select a, max(b), second_max(b) from t group by a order by  1 ;
...
Рейтинг: 0 / 0
02.07.2008, 12:29
    #35406160
LeXa NalBat
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выборка предпоследнего значения
select numid from table where id=21 order by numid desc limit 1 offset 1
...
Рейтинг: 0 / 0
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Выборка предпоследнего значения / 4 сообщений из 4, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]