Как написать Oracle SQL для сброса счетчика на основе значения? - PullRequest
0 голосов
/ 29 ноября 2018

Как я могу сбросить счетчик, как показано в следующих примерах (мне нужно сгенерировать счетчик в столбце с именем «Счетчик, который мне нужно сгенерировать»?

enter image description here

Ответы [ 2 ]

0 голосов
/ 29 ноября 2018

Вот альтернативный пример, который генерирует группу при использовании аналитических функций вместо скалярного подзапроса:

with grp as (
select t.*
     , sum(case gapnoofdays when 1 then 0 else 1 end) over (partition by customer_id order by urn) grp
  from your_table t
)
select grp.*
     , row_number() over (partition by customer_id, grp order by urn) n
  from grp;
0 голосов
/ 29 ноября 2018

Похоже, что каждое значение больше 1 сбрасывает счетчик, верно?

Если это так, вы можете сначала назначить номер группы, исходя из того, сколько раз значение> 1 встречается до текущей строки (включая).Таким образом, строки с 1 по 11 будут группой 0, 12 и 13 будут группой 1 и так далее.

Затем вы можете применить оконную функцию row_number для генерации нумерации, разбитой на эту группу:

with VW_GROUPED as (
  select
    t.*,
    (select count(*) from TheTable x where x.URN <= t.URN and x.GAPNOOFDAYS > 1) as GROUPNO
  from
    TheTable /* <- your table name here */ t)

select
  g.URN,
  g.CUSTOMER_ID,
  g.GAPNOOFDAYS,
  row_number() over (partition by GROUPNO order by URN) as "Counter I need to generate"
from
  VW_GROUPED g
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...