Hive SQL 时间窗口函数:判断最近 24 小时数据是否一致
假设有一个表名为table_name,其中包含id、value、timestamp三个字段,可以按照以下步骤进行操作:
-
使用
LAG函数来获取上一条记录的value值,同时按照timestamp字段降序排列:SELECT id, value, timestamp, LAG(value) OVER (ORDER BY timestamp DESC) AS prev_value FROM table_name; -
使用
CASE函数来判断当前记录与上一条记录的value值是否一致:SELECT id, value, timestamp, CASE WHEN value = prev_value THEN '一致' ELSE '不一致' END AS status FROM ( SELECT id, value, timestamp, LAG(value) OVER (ORDER BY timestamp DESC) AS prev_value FROM table_name ) t; -
使用
WINDOW函数来对时间做开窗操作,只统计最近24小时内的记录:SELECT id, value, timestamp, CASE WHEN value = prev_value THEN '一致' ELSE '不一致' END AS status, COUNT(*) OVER (ORDER BY timestamp RANGE BETWEEN INTERVAL '24' HOUR PRECEDING AND CURRENT ROW) AS cnt FROM ( SELECT id, value, timestamp, LAG(value) OVER (ORDER BY timestamp DESC) AS prev_value FROM table_name ) t WHERE timestamp >= DATE_SUB(NOW(), INTERVAL 24 HOUR); -
最终结果为最近24小时内,每条记录的
id、value、timestamp、是否一致以及在该记录之前的最近24小时内一致的记录数。如果cnt等于当前记录的行号,则表示最近24小时内的所有记录都一致。
原文地址: https://www.cveoy.top/t/topic/m1qA 著作权归作者所有。请勿转载和采集!