У меня есть фрейм данных со столбцом, который заполняется только для первого в последовательности строк:
+----------------+----------+----------+
| Activity | date| StartID|
+----------------+----------+----------+
| prime|2018-08-12| 466750|
| data check|2018-08-12| 0|
| data check|2018-08-12| 0|
| part check|2018-08-12| 0|
| initialization|2018-08-12| 0|
| part check|2018-08-12| 834730|
| initialization|2018-08-13| 0|
| processing|2018-08-13| 0|
| processing|2018-08-13| 0|
+----------------+----------+----------+
Мне нужно найти способ заполнить StartID
значением изпредыдущая строка с ненулевым значением.Насколько я понимаю, данные не могут быть изменены, поэтому я ищу способ создать что-то вроде этого:
+----------------+----------+--------+--------+
| Activity | Date| StartID| TxnID|
+----------------+----------+--------+--------+
| prime|2018-08-12| 466750| 466750|
| data check|2018-08-12| 0| 466750|
| data check|2018-08-12| 0| 466750|
| part check|2018-08-12| 0| 466750|
| initialization|2018-08-12| 0| 466750|
| part check|2018-08-12| 834730| 834730|
| initialization|2018-08-13| 0| 834730|
| processing|2018-08-13| 0| 834730|
| processing|2018-08-13| 0| 834730|
+----------------+----------+--------+--------+
Я пытался сделать что-то вроде:
SELECT * ,
CASE WHEN
StartID > 0
THEN
StartID
ELSE
Lead(TxnID) OVER (ORDER BY date) -- This seems to have caused an issue, as it is trying to reference itself.
END as TxnID
FROM stateData ORDER BY date
Это даетошибка
«не может разрешить» TransID
«заданные входные столбцы», что имеет смысл, поскольку оно ссылается на исходный кадр данных, а не на результирующий кадр данных.
Есть ли способ выполнить этот тип операции и получить требуемый результат?