Ajuda para criar uma consulta para replicar o progresso do TL3

Olá, pessoal,

Temos um programa em nossa comunidade no qual promovemos certos membros assíduos ao status de PosBuddy. São usuários regulares que compartilham o tom de voz de nossas marcas e demonstraram aptidão para responder perguntas, impulsionar conversas e acolher novos membros na comunidade.

Esse programa concede a esses usuários o TL4; eles têm seu próprio grupo privado dentro da comunidade e a capacidade de fechar, mesclar e mover posts, mantendo, de modo geral, a comunidade organizada. Também oferecemos a esses membros muitos benefícios excelentes, como produtos gratuitos, mercadorias e convites exclusivos para nossas apresentações de desenvolvimento. Como podem imaginar, há grandes incentivos para que eles avancem até o TL3 e contribuam para nossa comunidade.

Frequentemente, queremos saber quais usuários estão quase no TL3, mas ainda não chegaram lá. Para isso, analisamos centenas de usuários do TL2 a cada mês, verificamos o quão distantes eles estão de atingir o TL3 e conferimos os requisitos da tabela de Nível de Confiança 3.

Queremos facilitar esse processo, por isso temos uma consulta no Data Explorer que mostra a maior parte das informações que precisamos em uma única visão. No entanto, não consigo descobrir como incluir os seguintes campos na consulta listada abaixo:

  • Tópicos respondidos
  • Posts sinalizados
  • Usuários que sinalizaram
  • Curtidas recebidas: dias únicos
  • Curtidas recebidas: usuários únicos
  • Silenciado (tempo todo)
  • Suspenso (tempo todo)

Se alguém puder ajudar, ficarei eternamente grato.

-- [params]
-- int :from_days_ago = 0
-- int :duration_days = 100

with
t as (
  select 
    CURRENT_TIMESTAMP - ((:from_days_ago + :duration_days) * (INTERVAL '1 days')) as start,
    CURRENT_TIMESTAMP - (:from_days_ago * (INTERVAL '1 days')) as end
),
pr as (
    select user_id, 
        count(1) as visits,
        sum(posts_read) as posts_read
    from user_visits, t
    where posts_read > 0
    and visited_at > t.start
    and visited_at < t.end
    group by user_id
),
pc as (
  select user_id, 
      count(1) as posts_created
  from posts, t
  where created_at > t.start
  and created_at < t.end
  group by user_id
),
ttopics as (
 select user_id, posts_count
  from topics, t
  where created_at > t.start
  and created_at < t.end
),
tc as (
  select user_id, 
      count(1) as topics_created
  from ttopics
  group by user_id
),
twr as (
  select user_id, 
      count(1) as topics_with_replies
  from ttopics
  where posts_count > 1
  group by user_id
),
tv as (
 select user_id, 
        count(distinct(topic_id)) as topics_viewed
  from topic_views, t
  where viewed_at > t.start
  and viewed_at < t.end
  group by user_id
),
likes as (
  select 
      post_actions.user_id as given_by_user_id, 
      posts.user_id as received_by_user_id
  from t, post_actions
  left join posts
  on post_actions.post_id = posts.id
  where post_actions.created_at > t.start
  and post_actions.created_at < t.end
  and post_action_type_id = 2

),
lg as (
  select given_by_user_id as user_id, 
      count(1) as likes_given
  from likes
  group by user_id
),
lr as (
  select received_by_user_id as user_id, 
      count(1) as likes_received
  from likes
  group by user_id
),
e as (
  select email, user_id
  from user_emails u
  where u.primary = true
)
select pr.user_id,
       coalesce(visits,0) as "Visits",
       coalesce(topics_viewed,0) as "Topics Viewed",
       coalesce(posts_read,0) as "Posts Read", 
       coalesce(posts_created,0) as "Posts Created",
       coalesce(topics_created,0) as "Topics Created",
       coalesce(topics_with_replies,0) as "Topics with Replies",
       coalesce(likes_given,0) as "Likes Given",
       coalesce(likes_received,0) as "Likes Received"
from pr
left join tv using (user_id)
left join pc using (user_id)
left join tc using (user_id)
left join twr using (user_id)
left join lg using (user_id)
left join lr using (user_id)
left join e using (user_id)
left join users on pr.user_id = users.id
order by 
  visits desc, 
  posts_read desc, 
  posts_created desc
1 curtida