已接受解决方案查询

您好,我正在使用以下查询来检查本月已接受的解决方案。但是,我无法看到三月之后的数据。此外,这些数字与“已接受解决方案报告”中显示的不符。我能在这方面得到一些指导,告诉我哪里做错了什么吗?

SELECT DISTINCT 
YEAR(p.created_at), MONTH(p.created_at), 
count(distinct(p.topic_id))
    FROM posts p
    JOIN posts_custom_fields pcf ON pcf.post_id = p.id
    WHERE (pcf.name = 'is_accepted_answer' AND pcf.value = 'true') AND YEAR(p.created_at) = 2025
    GROUP BY 1,2

您好 Shreyas,

查看您分享的查询,您之所以看不到三月之后的数据,并且查询中的数字与 Accepted Solutions Dashboard Report 不符,是因为您使用的是 posts_custom_fields 数据库表,而 Discourse Solved 插件使用 discourse_solved_solved_topics 表来跟踪已接受的解决方案。

2025 年 3 月起,一项更改 更新了 Discourse Solved 插件,使用 discourse_solved_solved_topics 数据库表来确定您 Discourse 网站上的已解决主题,该表现在是所有解决方案数据的真实来源。

以下是您查询的更正版本,它将与 Accepted Solutions Report 匹配,并显示您 2025 年的数据。

2025 年按月计算的已接受解决方案

SELECT 
    EXTRACT(YEAR FROM p.created_at) AS year,
    EXTRACT(MONTH FROM p.created_at) AS month,
    TO_CHAR(p.created_at, 'Month') AS month_name,
    COUNT(DISTINCT dst.topic_id) AS solutions_count
FROM discourse_solved_solved_topics dst
JOIN posts p ON p.id = dst.answer_post_id
WHERE p.created_at >= '2025-01-01' AND p.created_at < '2026-01-01'
GROUP BY 1, 2, 3
ORDER BY year, month

此查询的结果将包括:

  • 2025 年所有有已接受解决方案的月份(不仅仅是三月)
  • 与 Accepted Solutions Report 匹配的数字,因为它使用的是相同的底层数据库表
  • 使用 PostgreSQL 的原生函数进行日期格式化

希望这能帮助您找到所需的数据!:slightly_smiling_face:

2 个赞

谢谢@SaraDev!这很有帮助。我将检查此查询的输出,一旦我能够在 Snowflake 中查询 discourse_solved_solved_topics。