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

如何在Redshift SQL中抽取指定时间范围内的10000个随机用户-日期对?

Redshift SQL按user-id抽样及日期范围筛选实现

首先注意你提到的日期范围“2000-01-01至2020-01-01”跨度较大,如果是笔误(比如实际要筛选2020年1月1日当天或某段更窄的范围),直接调整下文的日期条件即可。以下分两种场景给出实现方案:

场景1:随机抽取10000条指定日期范围内的user-id+日期组合记录

如果不需要保证user-id唯一,只是随机选取该日期范围内的10000条记录,可直接用RANDOM()排序后取前10000条:

SELECT user_id, date, other_columns
FROM your_table
WHERE date BETWEEN '2000-01-01' AND '2020-01-01'
ORDER BY RANDOM()
LIMIT 10000;

若数据量极大,ORDER BY RANDOM()性能可能不佳,可改用ROW_NUMBER()优化:

SELECT user_id, date, other_columns
FROM (
    SELECT 
        user_id, date, other_columns,
        ROW_NUMBER() OVER (ORDER BY RANDOM()) AS rn
    FROM your_table
    WHERE date BETWEEN '2000-01-01' AND '2020-01-01'
) sub_query
WHERE rn <= 10000;

场景2:先随机抽取10000个唯一user-id,再获取这些用户的指定日期范围记录

如果是要按user-id维度抽样(即选中10000个不同用户,再取他们在目标日期范围内的所有记录),可通过CTE先抽取唯一user-id,再关联原表:

WITH sampled_unique_users AS (
    SELECT DISTINCT user_id
    FROM your_table
    WHERE date BETWEEN '2000-01-01' AND '2020-01-01'
    ORDER BY RANDOM()
    LIMIT 10000
)
SELECT t.user_id, t.date, t.other_columns
FROM your_table t
JOIN sampled_unique_users s ON t.user_id = s.user_id
WHERE t.date BETWEEN '2000-01-01' AND '2020-01-01';

额外说明

  • Redshift也支持TABLESAMPLE语法(如SELECT * FROM your_table TABLESAMPLE BERNOULLI(10)),但这是按比例近似抽样,无法保证精确抽取10000条/个,适合快速预览数据。
  • 若目标日期范围是2020-01-01当天,可将WHERE条件改为date = '2020-01-01'。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 06:25:22