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

如何编写SQL/Hive查询统计赛事最后10分钟的推文数量?

解决赛事最后10分钟推文统计的SQL/Hive查询方案

嘿,作为SQL/Hive新手碰到这种跨表时间范围统计真的很正常,我来一步步帮你搞定这个需求~

核心逻辑梳理

我们要做的就是:

  1. 从sample表中拿到目标赛事(id=2)的结束时间
  2. 计算出该赛事结束前10分钟的时间点(也就是统计的起始时间)
  3. 筛选tweettable中发布时间在「结束前10分钟 → 结束时间」这个区间内的推文,最后统计数量

针对你的场景的查询语句

方案1:子查询直接获取时间范围(简洁易读)

适合你这种只统计单场特定赛事的情况:

SELECT COUNT(tweet_id) AS last_10_min_tweet_count
FROM tweettable
WHERE created BETWEEN 
  -- 计算赛事结束前10分钟的时间点
  (SELECT DATE_SUB(endtime, INTERVAL 10 MINUTE) FROM sample WHERE id = 2)
  AND
  -- 赛事结束时间
  (SELECT endtime FROM sample WHERE id = 2);

方案2:跨表关联查询(适合多赛事扩展)

如果以后要统计多场赛事的最后10分钟推文,用关联更灵活:

SELECT 
  s.id AS event_id,
  COUNT(t.tweet_id) AS last_10_min_tweet_count
FROM sample s
LEFT JOIN tweettable t 
  ON t.created BETWEEN DATE_SUB(s.endtime, INTERVAL 10 MINUTE) AND s.endtime
WHERE s.id = 2 -- 指定要统计的赛事
GROUP BY s.id;

关键细节解释

  • 时间函数说明:Hive中用DATE_SUB(时间字段, INTERVAL N 单位)来往前推时间,这里是INTERVAL 10 MINUTE;如果是标准SQL(比如MySQL),可以换成DATE_ADD(endtime, INTERVAL -10 MINUTE),效果一致。
  • 数据验证:你的赛事结束时间是2005-11-10 18:22:00,往前推10分钟是2005-11-10 18:12:00,两条推文的发布时间都在这个区间内,所以查询结果会是2,完全符合预期。
  • 新手避坑提示:确保created和endtime字段都是timestamp或datetime类型,如果是字符串格式,需要先转换(比如Hive用to_timestamp(created, 'yyyy-MM-dd HH:mm:ss')),否则时间比较会出错。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 07:51:21