powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Как правильно сгруппировать данные?
3 сообщений из 3, страница 1 из 1
Как правильно сгруппировать данные?
    #40093421
mariem
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здравствуйте, нужно пронумеровать строки таблицы в отдельной колонке как на скриншоте. проблема в том, что на деле 1,3 и 4 строки получают один номер, т.к. поля id, tariff совпадают, но между датами есть разрыв, и учитывая разрыв нужно получить отдельные группы данных. как сгруппировать данные так, чтобы при наличии разрыва в датах группы были разные?
...
Рейтинг: 0 / 0
Как правильно сгруппировать данные?
    #40093427
Фотография Vadim Lejnin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мессир, чтобы Вам помогли, сначала покажите что САМИ сделали.
Как минимум подготовьте тестовые данные и напишите что ожидаете
памятка:
HOWTO :: Как правильно задавать вопросы
Как мне оформить свое сообщение?
Студентам, желающим помощи

1) Полная постановка задачи (без сокращений)

2) Подготовьте тестовые данные, лучше в виде with
пример (не ваш случай) в конце

3) Покажите что сделали, что получили, без сокращений. ( лучше не в виде screenshot)

4) используйте Тэги, читать код без них неудобно, правильно оформляйте сообщение

Пример подготовленных данных, запроса и вывода.
Код: plsql
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.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
-- table 1 with column list
with user_tab(user_id,user_name,registry_date) as (
select 1,'Bob',to_date('11.02.1921 23:04:44','DD.MM.YYYY HH24:MI:SS') from dual union all
select 2,'Max',to_date('11.02.1922 23:04:44','DD.MM.YYYY HH24:MI:SS') from dual union all
select 3,'Jon',to_date('11.02.1923 23:04:44','DD.MM.YYYY HH24:MI:SS') from dual
)
-- table 2 with column list
,user_post(post_id,user_id,parent_post_id,post_date,message) as (
select 100,1,null,to_date('11.02.1923 23:04:00','DD.MM.YYYY HH24:MI:SS'),'Hi' from dual union all
select 101,2,100,to_date('11.02.1923 23:05:23','DD.MM.YYYY HH24:MI:SS'),'Hi' from dual union all
select 102,3,100,to_date('11.02.1923 23:05:35','DD.MM.YYYY HH24:MI:SS'),'Hi' from dual union all
select 103,1,102,to_date('11.02.1923 23:06:00','DD.MM.YYYY HH24:MI:SS'),'How are you' from dual union all
select 104,2,102,to_date('11.02.1923 23:07:05','DD.MM.YYYY HH24:MI:SS'),'All right!' from dual union all
select 105,1,101,to_date('11.02.1923 23:06:21','DD.MM.YYYY HH24:MI:SS'),'Bye' from dual union all
select 106,1,104,to_date('11.02.1923 23:04:37','DD.MM.YYYY HH24:MI:SS'),'Bye' from dual union all
select 107,2,null,to_date('11.02.1923 23:08:56','DD.MM.YYYY HH24:MI:SS'),'Hmm' from dual
)
select
rpad(to_char(p.post_date,'YYYY-MM-DD HH24:MI:SS  '),20+level*2,' ')||u.user_name||': '||p.message as txt
from 
 user_post p
 join user_tab  u on ( p.user_id = u.user_id)
where p.post_date >= u.registry_date
start with p.parent_post_id is null 
connect by prior p.post_id=p.parent_post_id 
;

TXT
--------------------------------------------------------------------------------
1923-02-11 23:04:00   Bob: Hi
1923-02-11 23:05:23     Max: Hi
1923-02-11 23:06:21       Bob: Bye
1923-02-11 23:05:35     Jon: Hi
1923-02-11 23:06:00       Bob: How are you
1923-02-11 23:07:05       Max: All right!
1923-02-11 23:04:37         Bob: Bye
1923-02-11 23:08:56   Max: Hmm

8 rows selected.
...
Рейтинг: 0 / 0
Как правильно сгруппировать данные?
    #40093461
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mariem,


math_recognize

в старых версиях
lag/lead
Код: plsql
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.
27.
28.
29.
with t (id,tarif,strt,end) as (
  select 1,1,10,20 from dual union all
  select 1,2,20,30 from dual union all
  select 1,2,30,40 from dual union all
  select 1,1,40,50 from dual union all
  select 1,1,50,60 from dual union all
  select 1,1,61,70 from dual )
,tt as (select t.*
 ,case when lag(tarif) over (order by strt) = tarif and
            lag(end) over (order by strt) = strt then 0 else 1 end f
from t)
select tt.*
 ,sum(f) over (order by strt) gr
from tt

SQL> /

        ID      TARIF       STRT        END          F         GR
---------- ---------- ---------- ---------- ---------- ----------
         1          1         10         20          1          1
         1          2         20         30          1          2
         1          2         30         40          0          2
         1          1         40         50          1          3
         1          1         50         60          0          3
         1          1         61         70          1          4

6 rows selected.

SQL>



.....
stax
...
Рейтинг: 0 / 0
3 сообщений из 3, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Как правильно сгруппировать данные?
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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