假设有一张表叫做 'table',包含以下字段:

  • id:记录的唯一标识
  • data:需要比较的数据
  • timestamp:记录的时间戳

可以使用以下 SQL 语句来判断最近 24 小时内数据是否一致:

SELECT id, data, timestamp,
  CASE
    WHEN COUNT(DISTINCT data) OVER (PARTITION BY id ORDER BY timestamp ROWS BETWEEN 23 PRECEDING AND CURRENT ROW) = 1 THEN '一致'
    ELSE '不一致'
  END AS result
FROM table
WHERE timestamp >= DATE_SUB(NOW(), INTERVAL 24 HOUR)

解释一下这个 SQL 语句的每个部分:

  • COUNT(DISTINCT data) OVER (PARTITION BY id ORDER BY timestamp ROWS BETWEEN 23 PRECEDING AND CURRENT ROW) 表示在按照 id 分组后,按照 timestamp 排序的窗口中,计算最近 24 小时内的数据的去重数量。
  • CASE WHEN ... THEN '一致' ELSE '不一致' END 表示根据上面的计算结果,判断数据是否一致。
  • WHERE timestamp >= DATE_SUB(NOW(), INTERVAL 24 HOUR) 表示筛选最近 24 小时内的记录。

因为开窗函数的计算结果会在每一行记录中生成,所以最终的结果中每一行都会显示最近 24 小时内数据的一致性。如果需要只显示最新的一条记录,可以在语句末尾加上 ORDER BY timestamp DESC LIMIT 1

Hive SQL 使用窗口函数判断最近24小时数据一致性

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

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