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

如何获取25条无重复user_id的随机有效查询结果?

解决方案:确保获取25个独立用户的SQL查询

问题根源

你的原SQL中SELECT distinct user_id, rcv_from, apptid是对三个字段的组合去重,而非仅保证user_id唯一。如果同一个用户存在多条不同rcv_from或apptid的记录,这些行都会被保留。执行ORDER BY RAND() Limit 25时,可能会选中同一个用户的多条记录,导致最终结果里的独立用户数不足25。

正确写法(以MySQL为例)

先随机筛选出25个符合条件的独立user_id,再关联原表获取每个用户的对应记录(以下两种方式任选其一):

方式1:获取每个用户的最新记录

SELECT t.user_id, t.rcv_from, t.apptid
FROM (
    -- 先随机选出25个唯一用户ID
    SELECT DISTINCT user_id
    FROM view.data_all 
    WHERE facility LIKE '%dallas%' 
      AND rcv_from >= '2020-10-01' 
      AND rcv_from <= '2021-09-30'
    ORDER BY RAND()
    LIMIT 25
) AS random_users
-- 关联原表获取该用户的记录
JOIN view.data_all AS t 
  ON t.user_id = random_users.user_id
-- 筛选出该用户在时间范围内的最新记录
WHERE t.rcv_from = (
    SELECT MAX(rcv_from) 
    FROM view.data_all 
    WHERE user_id = random_users.user_id
      AND facility LIKE '%dallas%' 
      AND rcv_from >= '2020-10-01' 
      AND rcv_from <= '2021-09-30'
)

方式2:获取每个用户的任意一条记录(简化版)

如果不需要指定取哪条记录,可通过GROUP BY直接聚合:

SELECT t.user_id, MAX(t.rcv_from) AS rcv_from, MAX(t.apptid) AS apptid
FROM (
    SELECT DISTINCT user_id
    FROM view.data_all 
    WHERE facility LIKE '%dallas%' 
      AND rcv_from >= '2020-10-01' 
      AND rcv_from <= '2021-09-30'
    ORDER BY RAND()
    LIMIT 25
) AS random_users
JOIN view.data_all AS t 
  ON t.user_id = random_users.user_id
WHERE facility LIKE '%dallas%' 
  AND rcv_from >= '2020-10-01' 
  AND rcv_from <= '2021-09-30'
GROUP BY t.user_id

关键说明

  • 子查询优先锁定25个独立用户,确保最终结果必含25个不同的user_id;
  • 关联原表时复用过滤条件,避免引入不符合时间或地点要求的记录;
  • 若使用其他数据库(如PostgreSQL),只需将ORDER BY RAND()替换为ORDER BY RANDOM()即可。

内容的提问来源于stack exchange,提问作者K Driscoll

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 20:22:40