количество значений в sql

Собственно, это именно то, чего вы ожидаете. Давайте разложим, что здесь происходит:

Вы пишете

lst = [[1] * 4] * 3

Это эквивалентно:

lst1 = [1]*4
lst = [lst1]*3

Это означает, что lst - это список с 3 элемента, указывающие на lst1. Это означает, что две следующие строки эквивалентны:

lst[0][0] = 5
lst1[0] = 5

Поскольку lst[0] - это только lst1.

Чтобы получить желаемое поведение, вы можете использовать понимание списка:

lst = [ [1]*4 for n in xrange(3) ]

В этом случае выражение переоценивается для каждого n, что приводит к другому списку.

1
задан user2657426 24 March 2019 в 04:36
поделиться

1 ответ

Вам необходимо назначить группировку. Группировка выглядит как число 0 в или позже каждой строки. Вы можете рассчитать это, используя совокупную сумму.

Затем в каждой группе вы можете использовать row_number() для расчета:

select t.*,
       (row_number() over (partition by grp order by "Date" asc) - 1) as counter
from (select t.*,
             sum(case when value = 0 then 1 else 0 end) over (order by "Date" desc) as grp
      from t
     ) t
order by "Date" desc;

Я не уверен, почему самое раннее значение будет NULL, поэтому я не включил это в логике.

Здесь - это db <> fiddle (обратите внимание, что здесь используется Postgres, но важный код тот же).

0
ответ дан Barbaros Özhan 24 March 2019 в 04:36
поделиться
Другие вопросы по тегам:

Похожие вопросы: