Хорошо, основываясь на вашем изображении, вы хотите рассчитывать последовательные значения WQ_WORKED при упорядочении по дате.Для этого сначала необходимо установить критерии группировки (разбиения) таким образом, чтобы нужные значения были правильно подсчитаны.
В этой ситуации вы можете сделать это, используя метод Табибитозан (путешественник) для определениягруппирует внутри вашей серии, сначала создавая row_number для каждой записи в вашем наборе записей, упорядоченной по cr_ts (и, возможно, по другому значению, если требуется прерыватель связи), а затем вычтите из этого row_number с тем же порядком, но разделив по значению, которое выхочу сгруппировать по.
Этот промежуточный идентификатор группы может затем использоваться вместе с исходными значениями раздела для вычисления вашего аналитического результата.В этом случае ваш окончательный row_count.
С предоставленными образцами данных (на основе прилагаемого изображения и расширенных данных из комментария ниже):
Drop Table #TABLE;
with DTA(SHIPTO, NAV_PN, WQ_WORKED, CR_TS) as (
select 7703556, '1817953C1', 1, cast('6/1/2018' as date) union all
select 7703556, '1817953C1', 1, cast('6/4/2018' as date) union all
select 7703556, '1817953C1', 0, cast('6/5/2018' as date) union all
select 7703556, '1817953C1', 0, cast('6/6/2018' as date) union all
select 7703556, '1817953C1', 1, cast('6/7/2018' as date) union all
select 7703556, '1817953C1', 0, cast('6/8/2018' as date) union all
--Expanded dataset below here
select 7703047, '1648518C1', 1, cast('6/12/2018' as date) union all --0 1 1
select 7703047, '1648518C1', 1, cast('6/13/2018' as date) union all --2 4 2
select 7703047, '2010358C1', 1, cast('6/12/2018' as date) union all --0 2 1
select 7703047, '2010358C1', 1, cast('6/13/2018' as date) union all --2 3 2
select 7813059, '1648518C1', 0, cast('6/12/2018' as date) union all --2 1 1
select 7813059, '1648518C1', 1, cast('6/13/2018' as date) union all --2 2 1
select 7813059, '2010358C1', 0, cast('6/12/2018' as date) union all --2 2 1
select 7813059, '2010358C1', 1, cast('6/13/2018' as date) --2 1 1
)
select SHIPTO, NAV_PN, WQ_WORKED, CR_TS
into #TABLE
from dta;
Следующий запрос возвращает ожидаемые результаты (дляисходные данные):
with tabi as (
select dta.*
, row_number() over (order by cr_ts)
- row_number() over (partition by wq_worked order by cr_ts) grp
from #TABLE dta
where shipto = 7703556
)
select SHIPTO, NAV_PN, WQ_WORKED, CR_TS
, row_number() over (partition by wq_worked, grp order by cr_ts) ROW_COUNT
from tabi
order by cr_ts
Результаты:
SHIPTO NAV_PN WQ_WORKED CR_TS ROW_COUNT
7703556 1817953C1 1 2018-06-01 1
7703556 1817953C1 1 2018-06-04 2
7703556 1817953C1 0 2018-06-05 1
7703556 1817953C1 0 2018-06-06 2
7703556 1817953C1 1 2018-06-07 1
7703556 1817953C1 0 2018-06-08 1
С расширенным набором данных, приведенным в вашем комментарии ниже, необходимо добавить дополнительные критерии разделения для различных аналитических функций:
with tabi as (
select dta.*
, row_number() over (partition by SHIPTO, NAV_PN order by cr_ts)
- row_number() over (partition by SHIPTO, NAV_PN, WQ_WORKED order by cr_ts) grp
from #TABLE dta
)
select tabi.*
, row_number() over (partition by SHIPTO, NAV_PN, WQ_WORKED, grp order by cr_ts) ROW_COUNT
from tabi
order by SHIPTO, NAV_PN, WQ_WORKED, cr_ts