Я хочу посчитать количество вхождений, которые существуют перед строкой.
Таблица:
|day |time|type|1 |2 |3 |4 |
|Mon |9 |A |a1 |a2 |a3 |a4 |
|Mon |10 |B |b1 |b2 |b3 |b4 |
|Mon |12 |A |c1 |c2 |c3 |c4 |
|Mon |20 |C |d1 |d2 |d3 |d4 |
|Tue |9 |A |e1 |e2 |e3 |e4 |
|Tue |10 |B |f1 |f2 |f3 |f4 |
|Tue |11 |B |g1 |g2 |g3 |g4 |
|Tue |12 |C |h1 |h2 |h3 |h4 |
|Wed |9 |A |i1 |i2 |i3 |i4 |
Выход:
|day |time|type|1 |2 |3 |4 |#A |
|Mon |9 |A |a1 |a2 |a3 |a4 |0 |
|Mon |10 |B |b1 |b2 |b3 |b4 |1 |
|Mon |12 |A |c1 |c2 |c3 |c4 |1 |
|Mon |20 |C |d1 |d2 |d3 |d4 |2 |
|Tue |9 |A |e1 |e2 |e3 |e4 |0 |
|Tue |10 |B |f1 |f2 |f3 |f4 |1 |
|Tue |11 |B |g1 |g2 |g3 |g4 |1 |
|Tue |12 |C |h1 |h2 |h3 |h4 |1 |
|Wed |9 |A |i1 |i2 |i3 |i4 |0 |
Я пытался выполнить
select
x.day,x.time,x.type,x.1,x.2,x.3,x.4,count(*) as #A
from
Table as x
left outer join
Table(where type=A) as y
on
y.day = x.day
and
y.time < x.time
group by
x.day,x.time,x.type,x.1,x.2,x.3,x.4
но это не дает мне правильного ответа с #A слишком низким.
Таблица довольно большая, с более чем 30M строками и более 50КБ типа A с порядком, вызвавшим отскок лимита памяти, не помогает отлаживать ошибки ...
Мне также нужно, чтобы это выполнялось как запланированное задание, я решил использовать поток данных или dataprep, чтобы помочь, но я бы предпочел решить его исключительно в BigQuery.
Любая помощь будет высоко ценится.
Спасибо!
РЕДАКТИРОВАТЬ: я пытаюсь отладить запрос на меньшем наборе данных.