Ниже приведено для BigQuery Standard SQL
#standardSQL
SELECT *,
IF(
LAST_VALUE(Item IGNORE NULLS) OVER(ORDER BY ts ROWS BETWEEN UNBOUNDED PRECEDING AND 1 PRECEDING) !=
FIRST_VALUE(Item IGNORE NULLS) OVER(ORDER BY ts ROWS BETWEEN 1 FOLLOWING AND UNBOUNDED FOLLOWING)
AND Item IS NULL, NULL, ''
) AS DesiredColumn
FROM `project.dataset.table`
Если применимо к образцу данных из вашего вопроса (как в примере ниже)
#standardSQL
WITH `project.dataset.table` AS (
SELECT 1 ts, 'a' Item UNION ALL
SELECT 2, NULL UNION ALL
SELECT 3, NULL UNION ALL
SELECT 4, 'b' UNION ALL
SELECT 5, NULL UNION ALL
SELECT 6, NULL UNION ALL
SELECT 7, 'b'
)
SELECT *,
IF(
LAST_VALUE(Item IGNORE NULLS) OVER(ORDER BY ts ROWS BETWEEN UNBOUNDED PRECEDING AND 1 PRECEDING) !=
FIRST_VALUE(Item IGNORE NULLS) OVER(ORDER BY ts ROWS BETWEEN 1 FOLLOWING AND UNBOUNDED FOLLOWING)
AND Item IS NULL, NULL, ''
) AS DesiredColumn
FROM `project.dataset.table`
вывод будет
Row ts Item DesiredColumn
1 1 a
2 2 null null
3 3 null null
4 4 b
5 5 null
6 6 null
7 7 b
Примечание: у вас должен быть столбец в вашей таблице, который определяет порядок, в котором должно происходить сравнение. В моем примере выше такой столбец ts