Нумерация строк в зависимости от значения столбца
Есть таблица со столбцами group и flag. Нужно пронумеровать их строки для каждой группы (group), получить столбец number. Если флаг (flag) равен 1, то номер строки (number) увеличивается на 1, если флаг равен 0, то номер строки будет равен последнему номеру строки с флагом 1. Microsoft SQL Server 2017 - 14.0.3445.2 (X64)
| group | flag | number |
|---|---|---|
| 1 | 1 | 1 |
| 1 | 1 | 2 |
| 1 | 1 | 3 |
| 1 | 1 | 4 |
| 1 | 0 | 4 |
| 1 | 0 | 4 |
| 2 | 1 | 1 |
| 2 | 0 | 1 |
| 2 | 1 | 2 |
| 2 | 0 | 2 |
| 2 | 0 | 2 |
| 2 | 1 | 3 |
| 2 | 0 | 3 |
| 2 | 1 | 4 |
| 2 | 1 | 5 |
Ответы (1 шт):
Автор решения: pegoopik
→ Ссылка
SELECT *, SUM(flag)OVER(PARTITION BY [group] ORDER BY cur_time
ROWS UNBOUNDED PRECEDING
)[number]
FROM [Table]
Убедитесь, что пара [
group] +cur_time- уникальнаНе забудьте добавить
ROWS UNBOUNDED PRECEDING, По умолчанию используетсяRANGE UNBOUNDED PRECEDING, что работает медленнее, т.к. приводит к спулу окна.