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