查找缺少的备用号码

问题描述 投票:0回答:1

我的数据如下,如何找出记录之间的丢失事件。如果您看到以下有关up事件的数据丢失(Record4)

Datetime,            Event_Type
2019-01-01 00:15:00, Down - Record1
2019-01-01 08:00:00, Up  - Record2
2019-01-01 12:15:00, Down - Record3
2019-01-02 08:00:00, Down - Record5
2019-01-02 13:00:00, Up   - Record6

我的结果应显示缺少连续事件的异常记录

sql gaps-and-islands
1个回答
0
投票

如果datetime值是唯一的,类似这样的方法应该起作用

prev_ids-我们获得每条记录的先前日期时间,并计数先前的记录以获取行号

然后仅检查记录的event_type是否等于先前的event_type,然后在此处丢失

SELECT 
  IF(t.event_type = 'DOWN', 'UP', 'DOWN') as missing,
  prev_ids.line_number
FROM my_table t
INNER JOIN
  (SELECT 
    t.datetime, 
    MAX(t2.datetime) as previous_datetime, 
    COUNT(t2.datetime) + 1 as line_number
  FROM my_table t LEFT JOIN my_table t2 ON t.datetime > t2.datetime
  GROUP BY t.datetime
) prev_ids ON t.datetime = prev_ids.datetime
INNER JOIN my_table prev 
  ON prev.datetime = prev_ids.previous_datetime
WHERE prev.event_type = t.event_type
© www.soinside.com 2019 - 2024. All rights reserved.