powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Посчитать значения подряд
11 сообщений из 11, страница 1 из 1
Посчитать значения подряд
    #39806631
007alex3
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Доброго времени суток. Подскажите пожалуйста, как посчитать кол-во игроков, которые подряд участвовали в соревнованиях 2 раза,3 и тд (id соревнования идет по порядку, если игрок участвовал подряд). Знаю, что скорее всего это делается с помощью lag/lead , но не могу понять как и что между собой сгруппировать и вычесть, чтобы понять, кто сколько раз подряд участвовал...Помогите пожалуйста.
...
Рейтинг: 0 / 0
Посчитать значения подряд
    #39806642
123йй
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SoG + count>=
007alex32 раза,3 и тд
...
Рейтинг: 0 / 0
Посчитать значения подряд
    #39806649
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
123ййSoG + count>=Ой ли?
...
Рейтинг: 0 / 0
Посчитать значения подряд
    #39806672
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
007alex3,

наберите данные через With (id_igrok,id_sorev) as ( ...

и я посчитаю

.....
stax
...
Рейтинг: 0 / 0
Посчитать значения подряд
    #39806687
123йй
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Elic,
авторid соревнования идет по порядку, если игрок участвовал подряд
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
with t as
 (select case
           when level >= 6 then
            level + 5
           else
            level
         end id
        ,'4444' m
  from   dual
  connect by level < 10
  union all
  select 7
        ,'4444'
  from   dual)
select min(id),max(id),count(*)  from (
select t.*
      ,sum(start_of_group) over(order by id) as grp_id
from   (select t.*
              ,decode(id - lag(id) over(order by id), 1, 0, 1) start_of_group
        from   t) t)
group by m, grp_id
...
Рейтинг: 0 / 0
Посчитать значения подряд
    #39806698
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
123йй
Код: plsql
1.
with t as

Твои исходные данные подтверждают, что ты не понял задачу.
...
Рейтинг: 0 / 0
Посчитать значения подряд
    #39806715
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
007alex3,

Код: 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.
40.
SQL> ed
Wrote file afiedt.buf

  1  with t(id_sorev,id_igrok) as (
  2  select 97,1000 from dual union all
  3  select 98,1000 from dual union all
  4  select 102,1000 from dual union all
  5  select 103,1000 from dual union all
  6  select 97,34340 from dual union all
  7  select 98,34340 from dual union all
  8  select 99,34340 from dual union all
  9  select 100,34340 from dual union all
 10  select 102,34340 from dual
 11  )
 12  , tt as (
 13  select
 14    t.*
 15   ,id_sorev-(row_number() over (partition by id_igrok order by id_sorev)) g
 16  from t)
 17  select
 18    id_sorev
 19   ,id_igrok
 20   ,row_number() over (partition by id_igrok,g order by id_sorev) podrjad
 21  from tt
 22* order by 2,1
SQL> /

  ID_SOREV   ID_IGROK    PODRJAD
---------- ---------- ----------
        97       1000          1
        98       1000          2
       102       1000          1
       103       1000          2
        97      34340          1
        98      34340          2
        99      34340          3
       100      34340          4
       102      34340          1

9 rows selected.



зы
+MATCH_RECOGNIZE если версия позволяет

.....
stax
...
Рейтинг: 0 / 0
Посчитать значения подряд
    #39806716
007alex3
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
123йй,добрый день. Если я правильно понял, то скрипт выходит таким:
WITH t AS(
select distinct t.id_draw_play
,t.id_player
from dwh.t$all#ticket t
where 1=1
and t.id_player = 4893432021700
and t.id_game = 5536
and t.sale_date >= to_date ('04.04.2019 21:00', 'DD.MM.YYYY HH24:MI')
and t.sale_date < to_date ('09.04.2019 18:00', 'DD.MM.YYYY HH24:MI')
)
select min(id_draw_play),max(id_draw_play),count(*) from (
select t.*
,sum(start_of_group) over(order by id_draw_play) as grp_id
from (select t.*
,decode(id_draw_play - lag(id_draw_play) over(order by id_draw_play), 1, 0, 1) start_of_group
from t) t)
group by id_player, grp_id

применил для одного игрока, но мне кажется, что я напутал с Вашими id, я их правильно вставил?
...
Рейтинг: 0 / 0
Посчитать значения подряд
    #39806881
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: 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.
WITH t ("ID соревнования", "ID игрока")
AS(          select 10097, 4393205311000
from dual union all select 10098, 4393205311000
from dual union all select 10102, 4393205311000
from dual union all select 10103, 4393205311000
from dual union all select 10097, 4393205313434
from dual union all select 10098, 4393205313434
from dual union all select 10099, 4393205313434
from dual union all select 10100, 4393205313434
from dual union all select 10102, 4393205313434
from dual
)
select "ID игрока"
     , max("Где участвовал") keep(dense_rank first order by "Скока подряд" desc, id_g asc) "Где участвовал"
     , max("Скока подряд") "Скока подряд"
from (
  select "ID игрока"
       , id_g
       , min("ID соревнования")||'-'||max("ID соревнования") "Где участвовал"
       , count(*) "Скока подряд"
    from (select t.*
               , "ID соревнования"-count("ID соревнования") over(partition by "ID игрока" order by "ID соревнования") id_g
            from t
    ) g
   group by "ID игрока", id_g
   having count(*)>1
) group by  "ID игрока"
;
 ID игрока Где участвовал   Скока подряд
---------- ---------------- ------------
4393205311 10097-10098                 2
4393205313 10097-10100                 4

SQL> 
...
Рейтинг: 0 / 0
Посчитать значения подряд
    #39807828
007alex3
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Stax,спасибо Вам большое!
...
Рейтинг: 0 / 0
Посчитать значения подряд
    #39807829
007alex3
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
andrey_anonymous,спасибо большое! Данный вариант интересный, попробую на днях. Спасибо ещё раз!
...
Рейтинг: 0 / 0
11 сообщений из 11, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Посчитать значения подряд
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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