您好,
我正在尝试生成一个按月划分的顶级流量来源报告。我希望能够在一个图表/表格中看到我们的来源每个月是如何变化的。有什么方法可以获取这些数据吗?
目前我只能获得我感兴趣的整个 5 个月期间的总计:
谢谢,
Nacho
您好,
我正在尝试生成一个按月划分的顶级流量来源报告。我希望能够在一个图表/表格中看到我们的来源每个月是如何变化的。有什么方法可以获取这些数据吗?
目前我只能获得我感兴趣的整个 5 个月期间的总计:
谢谢,
Nacho
WITH traffic_sources AS (
SELECT
EXTRACT(MONTH FROM user_visits.visited_at) AS month,
incoming_referers.incoming_domain_id,
COUNT(*) AS visit_count,
LAG(COUNT(*)) OVER (PARTITION BY incoming_referers.incoming_domain_id ORDER BY EXTRACT(MONTH FROM user_visits.visited_at)) AS prev_month_visit_count
FROM user_visits
JOIN incoming_referers
ON user_visits.user_id = incoming_referers.id
WHERE user_visits.visited_at IS NOT NULL
GROUP BY EXTRACT(MONTH FROM user_visits.visited_at), incoming_referers.incoming_domain_id
)
SELECT
month,
incoming_domain_id,
visit_count,
prev_month_visit_count,
visit_count - COALESCE(prev_month_visit_count, 0) AS change
FROM traffic_sources
ORDER BY month, incoming_domain_id
嗨,我刚吃完晚饭回来,更新了查询;如果你有任何进展,请告诉我
。我的 discourse 服务器是新创建的,所以没有足够的数据进行查询,我在 SQL Server 中创建了一些虚拟数据,然后将其传输到了 PGSQL。
如果对尝试此改编有用,这里是 SQL 版本的“热门流量来源”报告:
-- [params]
-- date :start_date = 04/05/2023
-- date :end_date = 05/06/2023
WITH count_links AS (
SELECT COUNT(*) AS clicks,
ind.name AS domain
FROM incoming_links il
INNER JOIN posts p ON p.deleted_at ISNULL AND p.id = il.post_id
INNER JOIN topics t ON t.deleted_at ISNULL AND t.id = p.topic_id
INNER JOIN incoming_referers ir ON ir.id = il.incoming_referer_id
INNER JOIN incoming_domains ind ON ind.id = ir.incoming_domain_id
WHERE t.archetype = 'regular'
AND il.created_at > :start_date
AND il.created_at < :end_date
GROUP BY ind.name
ORDER BY clicks DESC
),
count_topics AS (
SELECT COUNT(DISTINCT p.topic_id) AS topics,
ind.name AS domain
FROM incoming_links il
INNER JOIN posts p ON p.deleted_at ISNULL AND p.id = il.post_id
INNER JOIN topics t ON t.deleted_at ISNULL AND t.id = p.topic_id
INNER JOIN incoming_referers ir ON ir.id = il.incoming_referer_id
INNER JOIN incoming_domains ind ON ind.id = ir.incoming_domain_id
WHERE t.archetype = 'regular'
AND il.created_at > (CURRENT_TIMESTAMP - INTERVAL '30 DAYS')
GROUP BY ind.name
)
SELECT cl.domain AS "Domain",
cl.clicks AS "Clicks",
ct.topics AS "Topics"
FROM count_links cl
JOIN count_topics ct ON cl.domain = ct.domain
LIMIT 10