You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何编写SQL统计用户最新特定Answer ID的条目数?

解决方法:统计特定AnswerID的用户最新回答数量

先看看你的初始SQL存在的两个小问题:

  1. 子查询里的WHERE uid=uid是自引用,数据库会把它理解成“当前行的uid等于自己”,相当于没做筛选,根本没法定位到用户的最新回答;
  2. 主查询里多了个分号,会直接导致语法错误哦。

这里给你两种实用的修改方案,按需选择:

方案一:关联子查询(直观易懂)

给表起不同的别名,让子查询明确关联外部的用户ID,找到该用户的最新回答日期:

SELECT COUNT(DISTINCT ua.uid)
FROM useranswers ua
WHERE ua.answerid = $1
  AND ua.date = (
    SELECT MAX(ua_inner.date)
    FROM useranswers ua_inner
    WHERE ua_inner.uid = ua.uid -- 这里关联外部的用户ID,精准找到该用户的最新回答时间
  );

方案二:窗口函数(高效进阶)

用ROW_NUMBER()给每个用户的回答按日期倒序编号,最新的回答会被标记为1,之后筛选出符合条件的记录:

SELECT COUNT(DISTINCT uid)
FROM (
  SELECT uid, answerid,
    ROW_NUMBER() OVER (PARTITION BY uid ORDER BY date DESC) AS rn
  FROM useranswers
) ranked
WHERE answerid = $1
  AND rn = 1;

小提示

  • 如果数据量不大,方案一足够用,写法也简单;
  • 要是你的表数据很多,方案二性能更好,因为只需要扫描一次表,比关联子查询的多次扫描效率高;
  • 如果存在同一用户在同一时间有多条回答的情况,可以在窗口函数的ORDER BY里再加个字段(比如answerid),确保唯一的“最新”记录。

你提到的表结构:
用户提供的表结构

内容的提问来源于stack exchange,提问作者Benjamin King

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 07:48:01