BigQuery ve Google Analytics SQL sorgusu - genişletilmiş soru

Nov 19 2020

Burada cevaplanan sorumu genişletmeye çalışıyorum . yani, veriler verildiğinde:

session_id  hit_timestamp   url event_category
1           11:12:23        url134      event1
1           11:14:23        url2234     event2
1           11:16:23        url_target  null
2           03:12:11        url2344     event1
2           03:14:11        url43245    event2
3           09:10:11        url5533     event2
3           09:09:11        url_target  null
4           08:08:08        url64356    event2
4           08:09:08        url56456    event2
4           08:10:08        url_target  null

Ve mevcut sonuç aşağıdaki gibidir:

session_id  event1  event2  target
1           1       1       1
2           0       0       0
3           0       0       0
4           0       2       1

Hedefin sıfıra eşit olduğu durumları yansıtmak için verilen sonucu genişletmek istiyorum. Ayrıca, kontrol tarihlerine bakılmaksızın bu vakalara olay sayısı ile açıklama ekleyebilir miyim?

Yani amaçlanan yeni sonuç aşağıdaki gibi olacaktır:

session_id  event1  event2  target
1           1       1       1
2           1       1       0
3           0       0       0
4           0       2       1

Url_target'in ziyaret edilmediği, gerçekleşen olayların sayısının olduğu session_id = 2 ile özellikle ilgileniyorum. Son olarak, session_id = 3 de nasıl işleyeceğimi bilmediğim başka bir durum! Bir etkinliği olduğu için (olay2), ancak url_target ziyaret edildikten sonra yapıldı. Belki özel bir durum olarak bunu target = 2 olarak belirtmeliyim. Ancak, bu SQL için zorsa, o zaman onu sonuçtan çıkarır ve yukarıdaki amaçlanan sonuç tablosu olarak sıfır olarak tutarım.

Katkılarınız için şimdiden çok teşekkürler.

Yanıtlar

1 GordonLinoff Nov 19 2020 at 22:51

Tanımladığınızdan, koşullu mantık istiyorsunuz. Bu çalışmalı:

select session_id,
       countif((target_hit_timestamp > hit_timestamp or target_hit_timestamp is null) and category = 'event1') as event1,
       countif((target_hit_timestamp > hit_timestamp or target_hit_timestamp is null) > hit_timestamp and category = 'event2') as event2,
       countif(url like '%target') as target
from (select t.*,
             min(case when url like '%target' then hit_timestamp end) over (partition by session_id) as target_hit_timestamp
      from t
     ) t
group by session_id

target_hit_timestampOlan NULLhiçbir hedef URL varsa.