Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Oracle Новый топик    Ответить
 Группировка и суммы  [new]
maksim2020
Member

Откуда: оттуда
Сообщений: 113
Доброго времени суток!

Господа, помогите, плз, с такой задачей:

CREATE TABLE TEST1
(
    amount   NUMBER(10,2),
    val     VARCHAR2(1)
)
/

INSERT INTO TEST1 VALUES(1.2,'1')
/
INSERT INTO TEST1 VALUES(1.21,'1')
/ 
INSERT INTO TEST1 VALUES(1.4,'2')
/
INSERT INTO TEST1 VALUES(1.6,'2')
/
INSERT INTO TEST1 VALUES(1.5,'2')
/
INSERT INTO TEST1 VALUES(1.7,'2')
/
INSERT INTO TEST1 VALUES(2.0,'2')
/
INSERT INTO TEST1 VALUES(1.9,'3')
/
INSERT INTO TEST1 VALUES(1.94,'3')
/
INSERT INTO TEST1 VALUES(1.96,'3')
/
INSERT INTO TEST1 VALUES(2.96,'4')
/
INSERT INTO TEST1 VALUES(3.96,'4')
/

COMMIT;

Требуется выбрать такие группы записей, сгруппированные по val, у которых разница между соседними значениями amount не превышает 0.14.

Т.е., должно быть примерно так:

1 -> 2
2 -> 4
2 -> 1
3 -> 3

Записи с val=4 не попадают, т.к. разница между значениями больше 0.14.

Спасибо.

С уважением,
Максим.
1 ноя 06, 18:42    [3343841]     Ответить | Цитировать Сообщить модератору
 Re: Группировка и суммы  [new]
iV@n
Member

Откуда:
Сообщений: 382
получилось вот что:
select * from (
select t.*,
 lead(amount) over(partition by val order by amount) - amount la,
 amount - lag(amount) over(partition by val order by amount) al,
 row_number() over(partition by val order by amount) rn
from test1 t)
where rn=1 and la <= 0.14 or rn!=1 and al <= 0.14
1 ноя 06, 19:09    [3343945]     Ответить | Цитировать Сообщить модератору
 Re: Группировка и суммы  [new]
maksim2020
Member

Откуда: оттуда
Сообщений: 113
Большое спасибо!

С уважением,
Максим.
1 ноя 06, 19:22    [3343979]     Ответить | Цитировать Сообщить модератору
Все форумы / Oracle Ответить