Мой пример таблицы сценариев выглядит следующим образом:
+-------------------------------+
| User | Time | Property |
|------|-------------|----------|
| u1 | 2020-02-01 | p1 |
| u1 | 2020-02-02 | p1 |
| u1 | 2020-02-03 | p2 |
| u1 | 2020-02-04 | p2 |
| u2 | 2020-02-01 | p2 |
| u2 | 2020-02-02 | p2 |
| u2 | 2020-02-04 | p1 |
| u2 | 2020-02-05 | p1 |
+-------------------------------+
Данные упорядочены по столбцам User
и Time
.
Я хочу добавить столбец следующим образом
+--------------------------------------------+
| User | Time | Property | New_Column |
|------|-------------|----------|------------|
| u1 | 2020-02-01 | p1 | 1 |
| u1 | 2020-02-02 | p1 | 1 |
| u1 | 2020-02-03 | p2 | 2 |
| u1 | 2020-02-04 | p2 | 2 |
| u2 | 2020-02-01 | p2 | 3 |
| u2 | 2020-02-02 | p2 | 3 |
| u2 | 2020-02-04 | p1 | 4 |
| u2 | 2020-02-05 | p1 | 4 |
+--------------------------------------------+
Значение в New_Column
уникально для последовательности непрерывных строк, пока не изменится User
или Property
.
Редактировать 1:
Я пытаюсь построить логи c, которые вовремя используют предыдущее свойство для пользователя.
select
*
, lag(property,1) over (partition by User order by Time) as Prev_Property
from table
order by User, Time
Затем я добавил столбец Row_Number
Это дает мне
+------------------------------------------------------------+
| User | Time | Property | Prev_Property | Row_Number |
|------|-------------|----------|---------------|------------|
| u1 | 2020-02-01 | p1 | Null | 1 |
| u1 | 2020-02-02 | p1 | p1 | 2 |
| u1 | 2020-02-03 | p2 | p1 | 3 |
| u1 | 2020-02-04 | p2 | p2 | 4 |
| u2 | 2020-02-01 | p2 | Null | 5 |
| u2 | 2020-02-02 | p2 | p2 | 6 |
| u2 | 2020-02-04 | p1 | p2 | 7 |
| u2 | 2020-02-05 | p1 | p1 | 8 |
+------------------------------------------------------------+
Я попытался построить логи c следующим образом
CASE
WHEN Prev_Property is not null
THEN Row_Number
WHEN Property <> Prev_Property
THEN Row_Number
WHEN Property = Prev_Property
THEN -- a logic that gives me the Row_Number of the Prev_Property
Я все еще пытаюсь построить несколько последних условий в моем запросе. Пока это моя попытка.
Мне не нужно, чтобы значения в New_Column
были в порядке. Я только хочу, чтобы они были уникальными и удовлетворяли критериям группировки.