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

如何在Hive SQL中基于reading_date按每10天间隔提取数据?

Hive SQL实现按10天间隔筛选数据的解决方案

问题背景

你手头有一张名为t1的表,数据和结构如下:

t1.reading_datet1.use_datet1.namet1.reading_pct
12/17/201912/11/2019file175.00915527
12/22/201912/11/2019file175.5859375
12/27/201912/11/2019file176.90429688
1/1/202012/11/2019file174.29199219
1/2/202012/11/2019file164.93835449
1/7/202012/11/2019file165.10620117
1/12/202012/11/2019file166.90063477
1/17/202012/11/2019file166.47033691
1/22/202012/11/2019file166.35131836
1/27/202012/11/2019file159.61303711

你的需求是:从reading_date的最小值到最大值,按每10天的间隔筛选数据,得到指定格式的结果集。

实现代码

直接上可以运行的Hive SQL代码,我会一步步给你解释:

WITH date_converted AS (
    -- 转换日期格式并计算每条记录与最小日期的天数差
    SELECT 
        reading_date,
        use_date,
        name,
        reading_pct,
        to_date(reading_date, 'MM/dd/yyyy') AS reading_dt,
        datediff(to_date(reading_date, 'MM/dd/yyyy'), MIN(to_date(reading_date, 'MM/dd/yyyy')) OVER ()) AS days_diff
    FROM t1
)
SELECT 
    reading_date AS `new(t1.reading_date)`,
    use_date,
    name,
    reading_pct
FROM date_converted
WHERE days_diff % 10 = 0
ORDER BY reading_date;

代码拆解说明

  1. 日期格式转换:因为你的reading_date是字符串类型(比如12/17/2019),Hive没法直接做日期计算,所以先用to_date()把它转成Hive支持的日期类型,指定格式为MM/dd/yyyy(月/日/年)。
  2. 计算天数差:用窗口函数MIN() OVER ()可以拿到整个表中最早的reading_date,然后用datediff()函数算出当前记录的日期和这个最早日期之间差了多少天,结果存在days_diff字段里。
  3. 筛选间隔记录:咱们要的是每10天的记录,也就是days_diff为0、10、20...的记录,直接用days_diff % 10 = 0就能精准筛选出来——这一步就是核心,对应你要的每10天间隔的要求。
  4. 整理输出:最后把reading_date列重命名为你要的new(t1.reading_date),再按日期排序,就得到你想要的结果啦。

如果你的reading_date字段本身已经是Hive的日期类型,那可以去掉to_date()转换的部分,直接计算天数差就行,代码会更简洁。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.08 17:07:55