假设有一个表名为my_table,其中包含字段idvaluetimestamp,表示某个 ID 对应的数值和时间戳。可以使用窗口函数和子查询来判断最近 24 小时内数据是否一致,具体如下:

SELECT 
  id, 
  value, 
  timestamp, 
  CASE 
    WHEN value = latest_value_over_24h THEN '一致' 
    ELSE '不一致' 
  END AS consistency_within_24h
FROM (
  SELECT 
    id, 
    value, 
    timestamp, 
    LAST_VALUE(value) OVER (
      PARTITION BY id 
      ORDER BY timestamp 
      RANGE BETWEEN INTERVAL '24' HOUR PRECEDING AND CURRENT ROW
    ) AS latest_value_over_24h
  FROM my_table
) sub

解释一下以上 SQL 语句的逻辑:

  1. 子查询sub按照 ID 分组,并按照时间戳升序排列,然后使用LAST_VALUE()窗口函数,获取每个 ID 在最近 24 小时内的最新数值。

  2. 外层查询将子查询的结果与原表的每一行进行关联,比较当前行的数值和最近 24 小时内的最新数值是否相等,从而判断最近 24 小时内数据是否一致。

注意,以上 SQL 语句中的时间戳需要是 Unix 时间戳(即从 1970 年 1 月 1 日零点开始的秒数)。如果原表中的时间戳不是 Unix 时间戳,则需要进行转换。例如,如果原表中的时间戳是字符串类型的日期,可以使用 Hive 的内置日期函数unix_timestamp()将其转换为 Unix 时间戳,例如:

SELECT 
  id, 
  value, 
  unix_timestamp(timestamp, 'yyyy-MM-dd HH:mm:ss') AS timestamp_unix 
FROM my_table
Hive SQL 窗口函数:判断最近 24 小时数据一致性

原文地址: https://www.cveoy.top/t/topic/m1qJ 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录