mysql 上一行減去下一行

2022-01-15 08:08:25 字數 1913 閱讀 5015

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 選中索引由...