篩選大數據表中相鄰數據差值超過 5 分鐘
由于數據庫版本限制,無法使用開窗函數。以下提供了幾種替代方案:
方案 1:使用臨時變量
set @tmp = '2000-1-1'; select * from ( select *, timestampdiff(second, @tmp, time) as diff, @tmp := time from 表名 ) as t1 where diff > 300;
該語句通過臨時變量 @tmp 來存儲上一條記錄的時間,并與當前記錄的時間差進行比較,差值大于 300 秒則輸出該記錄。
方案 2:生成新表
select * from 表 as a left join 表 as b on a.主鍵 = b.主鍵+1 where timestampdiff(second, a.time, b.time) > 300;
此方案通過創建自增主鍵字段,然后使用連接條件來比較相鄰兩條記錄的時間差。
方案 3:減少選擇字段
set @i = 0; set @j = 0; select *, a2 - a1 from ( select *, @i := @i + 1 as a1 from lag1 ) as t1 left join ( select *, @j := @j + 1 as a2 from lag1 ) as t2 on t1.a1 + 1 = t2.a2 ;
該方案通過減少選擇字段來提高性能。需要注意的是,它需要創建副本表 lag1。
? 版權聲明
文章版權歸作者所有,未經允許請勿轉載。
THE END