Выберите разницу между датой события для уникального идентификатора, используя SQL - PullRequest
0 голосов
/ 06 июня 2018

Мне нужно считать количество событий, совершаемых каждым пользователем за день.Для этого мне нужно объединить две таблицы, где одна таблица содержит идентификатор пользователя и дату для каждого события, а другая таблица содержит календарь с каждой датой.

Я попробовал первый для уникального идентификатора пользователя, но вывод для delta_day равен 0:

 with a1 as (SELECT DISTINCT buyer_account_id_fk,
            event_date,
            count(event_date) as qtide,
            min(event_date) as first_event
 FROM ods.ad_contacts
 WHERE buyer_account_id_fk = 14954020
 and year = 2018
 GROUP BY 1,2
 LIMIT 1000),
 a2 as (select distinct buyer_account_id_fk,event_dt, qtide, 
 date_diff('day', first_event,event_dt) AS delta_day
 from a1
 RIGHT JOIN ods.calendar AS cal ON a1.event_date = cal.event_dt
 limit 1000)
 select buyer_account_id_fk, delta_day, qtide
 from a2
 group by 1,2,3


BUYER_ACCOUNT_ID_FK DELTA_DAY   QTIDE
    14,954,020         0         15
    14,954,020         0         8
    14,954,020         0         1
    14,954,020         0         22
    14,954,020         0         5
    14,954,020         0         9

Я понял, что проблеманаходится в определении min (event_date) , в котором для того же user_id результат совпадает с event_date , из-за этого delta_day равно 0, но я не знаю, как это исправить.

Пожалуйста, помогите мне !!

Таблица: ods.ad_contacts

BUYER_ACCOUNT_ID_FK EVENT_DATE
14,954,020            03/01/18
14,954,020            06/01/18
14,954,020            06/01/18
14,954,020            08/01/18

Таблица: ods.calendar

EVENT_DT
01/01/18
02/01/18
03/01/18
04/01/18
05/01/18
06/01/18
07/01/18
08/01/18

Я ожидаю в результате что-то вроде:

buyer_account_id_fk  delta_day  qtide   
  14,954,020           0          1
  14,954,020           3          2
  14,954,020           5          1
...