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

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

и я посчитаю

.....
stax
...
Рейтинг: 0 / 0
26.04.2019, 12:06
    #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
26.04.2019, 12:14
    #39806698
Elic
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Посчитать значения подряд
123йй
Код: plsql
1.
with t as

Твои исходные данные подтверждают, что ты не понял задачу.
...
Рейтинг: 0 / 0
26.04.2019, 12:26
    #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
26.04.2019, 12:27
    #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
26.04.2019, 16:03
    #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
29.04.2019, 18:20
    #39807828
007alex3
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Посчитать значения подряд
Stax,спасибо Вам большое!
...
Рейтинг: 0 / 0
29.04.2019, 18:20
    #39807829
007alex3
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Посчитать значения подряд
andrey_anonymous,спасибо большое! Данный вариант интересный, попробую на днях. Спасибо ещё раз!
...
Рейтинг: 0 / 0
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Посчитать значения подряд / 11 сообщений из 11, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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