溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶(hù)服務(wù)條款》

SQL如何現(xiàn)相鄰兩行數(shù)據(jù)加減乘除

發(fā)布時(shí)間:2020-10-26 14:31:17 來(lái)源:億速云 閱讀:909 作者:Leah 欄目:開(kāi)發(fā)技術(shù)

這期內(nèi)容當(dāng)中小編將會(huì)給大家?guī)?lái)有關(guān)SQL如何現(xiàn)相鄰兩行數(shù)據(jù)加減乘除,文章內(nèi)容豐富且以專(zhuān)業(yè)的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。

SQL實(shí)現(xiàn)表里數(shù)據(jù)按一定順序排序后,按某幾個(gè)字段分組后相鄰兩行數(shù)據(jù)實(shí)現(xiàn)加減乘除運(yùn)算。

思路:

1:先把表數(shù)據(jù)分組排序后打上序號(hào)標(biāo)簽

2:根據(jù)需求把標(biāo)簽字段加/減一

上代碼:

select distinct a.phone,from_unixtime(cast(floor(a.ts/1000) as bigint),'yyyyMMdd HH:mm:ss'),cha
from table a
join 
(
 select a.phone,a.ts,abs(a.ts-b.ts)/1000 cha
 from (select phone,ts,row_number() over(partition by phone order by ts ) rank from table) a
 left join
 ( select phone,ts,rank-1 as rank from (select phone,ts,row_number() over(partition by phone order by ts ) rank from table) a ) b
 on a.phone = b.phone and a.rank = b.rank
) b
on a.phone = b.phone and a.ts = b.ts
where a.phone is not null and a.phone<>'';

表數(shù)據(jù)如圖:

SQL如何現(xiàn)相鄰兩行數(shù)據(jù)加減乘除

第一列為phone,第二列為時(shí)間ts,要求算出相同phone的每?jī)蓷l相鄰數(shù)據(jù)所花費(fèi)的時(shí)間

結(jié)果如圖:

SQL如何現(xiàn)相鄰兩行數(shù)據(jù)加減乘除

第三列的單位是秒

補(bǔ)充知識(shí):SQL實(shí)現(xiàn)當(dāng)前行等于前面兩行數(shù)據(jù)之和

sql實(shí)現(xiàn)類(lèi)似斐波那契數(shù)列的功能,即當(dāng)前數(shù)據(jù)等于前面兩個(gè)數(shù)據(jù)之和,詳看本文例子

原表:

SQL如何現(xiàn)相鄰兩行數(shù)據(jù)加減乘除

sql語(yǔ)句(此處要熟悉JION ON的用法)

SQL如何現(xiàn)相鄰兩行數(shù)據(jù)加減乘除

結(jié)果

SQL如何現(xiàn)相鄰兩行數(shù)據(jù)加減乘除

上述就是小編為大家分享的SQL如何現(xiàn)相鄰兩行數(shù)據(jù)加減乘除了,如果剛好有類(lèi)似的疑惑,不妨參照上述分析進(jìn)行理解。如果想知道更多相關(guān)知識(shí),歡迎關(guān)注億速云行業(yè)資訊頻道。

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI