hive 两次操作时间间隔大于0.5小时(LAG)

需求

明细表A记录工人的操作记录,create_time 是操作时间,需要统计操作时间间隔大于0.5小时的次数

WITH ordered_actions AS (
  SELECT
    waybill_no,
    create_time,
    -- 使用 LAG 函数获取上一条记录的 create_time
    LAG(create_time) OVER (PARTITION BY waybill_no ORDER BY create_time) AS prev_create_time
  FROM
    A
)
-- 计算时间间隔,并筛选出间隔大于 0.5 小时的记录
SELECT
  COUNT(*) AS interval_count
FROM
  ordered_actions
WHERE
  -- 计算时间差(单位为小时),并筛选出大于 0.5 小时的记录
  DATEDIFF(create_time, prev_create_time) * 24 > 0.5
  -- 排除第一个记录,因为第一个记录没有上一条记录
  AND prev_create_time IS NOT NULL;
需求

明细表A记录工人的操作记录,create_time 是操作时间,需要按设备统计操作时间间隔大于0.5小时的次数,相邻的操作必须是同一个设备

WITH ordered_actions AS (
  SELECT
    device_id,
    create_time,
    -- 使用 LAG 函数获取上一条记录的 device_id 和 create_time
    LAG(device_id) OVER (ORDER BY create_time) AS prev_device_id,
    LAG(create_time) OVER (ORDER BY create_time) AS prev_create_time
  FROM
   export.tmp_zjs_08  WHERE dt='20241213' AND employee_no ='xxxx'
)
-- 计算时间间隔,并筛选出间隔大于 0.5 小时的记录
SELECT
  COUNT(*) AS interval_count
FROM
  ordered_actions
WHERE
  -- 检查是否为同一设备,并且时间间隔大于 0.5 小时
  (device_id = prev_device_id) AND
  (unix_timestamp(create_time) - unix_timestamp(prev_create_time)) > 1800
  -- 排除第一个记录,因为第一个记录没有上一条记录
  AND prev_create_time IS NOT NULL;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值