1.新建表1新增自增行號列(考慮到自增id 有丟失資料現象)
2.複製上表1為表2
3.根據表1、表2行號進行where或者left join on的處理
* where 進行處理的條件為表1表2完全的匹配
*left join on 處理的條件為 左表完全的匹配
#設定記憶體變數
set @arownum=0;
set @brownum=0;
#查詢sql
select a.id ,a.terminal_id,a.timestamp,a.seq-b.seq from
( select @arownum:=@arownum+1 as id ,terminal_id,timestamp,seq from `msg_basic` order by terminal_id, timestamp )as a
left join
( select @brownum:=@brownum+1 as id ,terminal_id,timestamp,seq from `msg_basic` order by terminal_id, timestamp )as b
on a.id = b.id+1
#也可新建表
create table tab2 as select @brownum:=@brownum+1 as id ,terminal_id,timestamp,seq from `msg_basic` order by terminal_id, timestamp
優化原因1:方法1中的a.id = b.id+1進行查詢速度很慢(1min以上),但a.id = b.id進行查詢的速度很快;於是開始想到update id (update tabname set id =id-1 測試可行 ;)
優化原因2:訊息序列在篩選時容易出現terminal_id 不一致現象,所以增加條件
優化原因3,檢視計算結果的過程明細
優化後語句:
set @arownum=0;
set @brownum=1;
#查詢sql
select a.id ,b.id,a.terminal_id,a.timestamp,b.timestamp,a.seq,b.seq ,a.seq-b.seq as dseq from
( select @arownum:=@arownum+1 as id ,terminal_id,timestamp,seq from `msg_basic` order by terminal_id, timestamp )as a,
( select @brownum:=@brownum+1 as id ,terminal_id,timestamp,seq from `msg_basic` order by terminal_id, timestamp )as b
where a.id = b.id and a.terminal_id=b.terminal_id #篩選裝置相同、seq差距為1
and a.seq-b.seq>1 #根據訊息序號進行篩選,丟失訊息數量需要大於1,如果連續則為1
and left(b.timestamp,6)=left(a.timestamp,6)#篩選日期相同的,進行訊息包減法
and cast(a.seq as signed integer) > 12 #排除熄火後重新點火後seq變為1
and cast(a.timestamp as signed integer) > 180201095138 #排除 18-02-01之前的資料
and a.terminal_id <> '01020408101f' # 排除裝置編號為01020408101f
前提 t1=[2-6]5個數字,t2:=[1:6] 6個數字 ,t1為t2刪去一行
因為mysql的相減 必須通過 where 條件找到共同的條件,類似於t1.id= t2.id;直接讓其相減則能夠得到, 5*6=30個結果;
mysql 儲存過程 後一行減去前一行
delimiter 統計單個使用者登入次數的存過 times count int 返回值 i 記錄行號的變數 初始值為0 temp 記錄時間差的變數 total 記錄登入次數的變數 初始值為0 nums 記錄共有多少行 單個使用者 j 記錄行號的變數 值為i 1 create procedure p...
sed刪除匹配行的上一行和下一行
aa string 變數指定匹配字串 sed i e aa e n n.aa p d file 例子 insert into bonusreturnorder values 47 224 1300573 2 1 wx20160203083601539373 hbtk20160204020000110...
kendoGrid 選中上一行 下一行
2017 12 20 var grid gridmaster data kendosmartgrid grid.select grid.select next 選中當前行的下一行 這種寫法的好處就是不用考慮grid header的行數,也不用關心select 取索引由0開始,select 選中索引由...