离线数仓月度统计要注意时间窗口问题(跨天统计导致违背现实物理规律)

在做物联网项目,要按月统计电压差和温度差时,刚开始最容易想到的是找出当月电压最大值和电压最小值,然后按求压差。最后统计结果是压差都很大。而实际上,是要找出某个小的周期内的温差,这种跨很大时间范围的压差并没有实际意义。

下面是先按天计算最大值,然后再按当月求最大值的sql:

SELECT ds, 
       max(max_diff_u) AS daily_max_diff 
FROM (
    SELECT ds, 
           cu, 
           max(value) - min(value) AS max_diff_u 
    FROM (
        SELECT id, 
               value, 
               ds 
        FROM your_table_name e 
        WHERE pid rlike '\\.U$' 
          AND (char_length(pid) - char_length(REPLACE(pid, '.', ''))) = 8 
          AND ds <= '${yes_date}' 
          AND (value < 4.9 OR value > 2.5) 
          AND ds >= from_timestamp(DATE_TRUNC('MONTH', from_unixtime(cast(unix_timestamp('${yes_date}','yyyyMMdd') AS bigint))), 'yyyyMMdd')
    ) AS daily_values 
    GROUP BY ds, pid
) AS daily_diffs 
GROUP BY ds
ORDER BY ds;

关注公众号“大模型全栈程序员”回复“小程序”获取1000个小程序打包源码。更多免费资源在http://www.gitweixin.com/?p=2627

发表评论

邮箱地址不会被公开。 必填项已用*标注