您好,登錄后才能下訂單哦!
遇到這樣一個需求,有一張表,要給這張表新增一個字段delta,delta的值等于每行的c1列的值減去上一行c1列的值。
我的解決方案,可以通過python的pandas的diff來實現,也可以通過sql來實現,如下
import pandas as pd srcTable = pd.read_csv('pos1.csv') print(srcTable) destTable = srcTable.loc[srcTable.tid == 1, ['ts1', 'ts2']].sort_values(by='ts1') destTable.columns = ['deltaTs1', 'deltaTs2'] destTable = destTable.diff() destTable = destTable.fillna(0) destTable['delay'] = destTable['deltaTs2'] - destTable['deltaTs1'] print(destTable)
出來的效果如下:
tid ts1 ts2 0 1 1500443161000 1500443161240 1 1 1500443162000 1500443162994 2 1 1500443163000 1500443163067 3 1 1500443164000 1500443164993 deltaTs1 deltaTs2 delay 0 0.0 0.0 0.0 1 1000.0 1754.0 754.0 2 1000.0 73.0 -927.0 3 1000.0 1926.0 926.0
若是用sql語句,我用的是mysql,自己構造行號rn
mysql> select main.t_id, main.ts1, ifnull(main.ts1-sub.ts1,0) deltaTs1, main.ts2, ifnull(main.ts2-sub.ts2,0) deltaTs2 from (SELECT t_id,ts1,ts2,(@r1 :=@r1 + 1) rn FROM pos1,(SELECT @r1 := 0) r where t_id=1 ORDER BY ts1) main left join (SELECT t_id,ts1,ts2,(@r2 :=@r2 + 1) rn FROM pos1,(SELECT @r2 := 0) r where t_id=1 ORDER BY ts1) sub on main.rn-1=sub.rn; +------+---------------+----------+---------------+----------+ | t_id | ts1 | deltaTs1 | ts2 | deltaTs2 | +------+---------------+----------+---------------+----------+ | 1 | 1500443161000 | 0 | 1500443161240 | 0 | | 1 | 1500443162000 | 1000 | 1500443162994 | 1754 | | 1 | 1500443163000 | 1000 | 1500443163067 | 73 | | 1 | 1500443164000 | 1000 | 1500443164993 | 1926 | +------+---------------+----------+---------------+----------+
測試數據如下
pos1.csv
1,1500443161000,1500443161240 1,1500443162000,1500443162994 1,1500443163000,1500443163067 1,1500443164000,1500443164993
CREATE TABLE `pos1` ( `t_id` int(11) DEFAULT NULL, `ts1` bigint(22) DEFAULT NULL, `ts2` bigint(22) DEFAULT NULL ) ENGINE=InnoDB DEFAULT CHARSET=utf8; INSERT INTO pos1 VALUES (1, 1500443161000, 1500443161240); INSERT INTO pos1 VALUES (1, 1500443162000, 1500443162994); INSERT INTO pos1 VALUES (1, 1500443163000, 1500443163067); INSERT INTO pos1 VALUES (1, 1500443164000, 1500443164993);
貌似有些數據庫有這種當前行減去上一行數據的函數,具體我沒有研究過。有知道的朋友可以告訴我一下,我印象中像Sqlserver好像有。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。