Извлечение данных с каждым идентификатором, имеющим уникальную метку времени, из которой можно извлекать данные из

#sql #syntax-error #common-table-expression #looker

Вопрос:

В настоящее время я использую Looker SQL Runner, и мне нужно получить общее количество сеансов, которые произошли для каждого идентификатора веб-сайта, и у каждого идентификатора веб-сайта разные временные точки, в которые мне нужно получить данные с начала до этого момента времени.

Формат будет примерно таким:

website_id Дата total_sessions всего пользователей
1 2021-08-13 100 98
2 2021-07-15 125 105
3 2021-06-29 98 85

Прямо сейчас мой код выглядит так:

 with base as
(
SELECT
      website_id
      ,session_count
      ,user_id
      ,'timestamp'
FROM page_views_y2
WHERE website_id in (100604,100577,1078,100501)
GROUP BY 1,2,3
),

min_time as
(
SELECT
      website_id
      ,session_count
      ,user_id
      ,min(timestamp) as session_start
FROM page_views_y2
WHERE website_id in (100604,100577,1078,100501)
GROUP BY 1,2,3
),

combined_count AS
(
SELECT
      base.website_id
      ,session_start
      ,COUNT(DISTINCT min_time.user_id||session_start||min_time.session_count) AS distinct_combined_count
      ,COUNT(DISTINCT base.user_id) AS distinct_users
FROM base
LEFT JOIN min_time
ON base.user_id=min_time.user_id
AND base.website_id=min_time.website_id
GROUP BY 1,2
)

SELECT
      website_id
      ,CASE 
        WHEN website_id=100604 AND session_start < (timestamp '2021-07-27') THEN distinct_combined_count
        WHEN website_id in (100577,1078) AND session_start < (timestamp '2021-07-26') THEN distinct_combined_count
        WHEN website_id=100501 AND session_start < (timestamp '2021-07-16') THEN distinct_combined_count
      ELSE 0 END AS final_count
      ,CASE 
        WHEN website_id=100604 AND session_start < (timestamp '2021-07-27') THEN distinct_users
        WHEN website_id in (100577,1078) AND session_start < (timestamp '2021-07-26') THEN distinct_users
        WHEN website_id=100501 AND session_start < (timestamp '2021-07-16') THEN distinct_users
      ELSE 0 END AS final_distinct_users
FROM combined_count
GROUP BY 1
 

Но я все время сталкиваюсь с ОШИБКОЙ: столбец «combined_count.session_start» должен отображаться в предложении GROUP BY или использоваться в агрегатной функции, несмотря на то, что он явно в группе by.

Кроме того, это всего четыре идентификатора веб-сайта, из которых мне все еще нужно обработать еще 30, поэтому, если я смогу заставить работать эти четыре, я смогу масштабировать их до всего списка идентификаторов и их соответствующих хронометражей.

Спасибо, что уделили мне время.

Ответ №1:

Вам нужно объединить утверждения «СЛУЧАЙ».

Комментарии:

1. Спасибо @NewToGo, я включил агрегацию СУММ в выписки по ДЕЛУ, и, похоже, она соответствует сеансам!