SQL怎么在時(shí)間序列中根據(jù)字段變化分組

今天就跟大家聊聊有關(guān)SQL怎么在時(shí)間序列中根據(jù)字段變化分組,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結(jié)了以下內(nèi)容,希望大家根據(jù)這篇文章可以有所收獲。

創(chuàng)新互聯(lián)建站服務(wù)項(xiàng)目包括桑珠孜網(wǎng)站建設(shè)、桑珠孜網(wǎng)站制作、桑珠孜網(wǎng)頁(yè)制作以及桑珠孜網(wǎng)絡(luò)營(yíng)銷策劃等。多年來(lái),我們專注于互聯(lián)網(wǎng)行業(yè),利用自身積累的技術(shù)優(yōu)勢(shì)、行業(yè)經(jīng)驗(yàn)、深度合作伙伴關(guān)系等,向廣大中小型企業(yè)、政府機(jī)構(gòu)等提供互聯(lián)網(wǎng)行業(yè)的解決方案,桑珠孜網(wǎng)站推廣取得了明顯的社會(huì)效益與經(jīng)濟(jì)效益。目前,我們服務(wù)的客戶以成都為中心已經(jīng)輻射到桑珠孜省份的部分城市,未來(lái)相信會(huì)繼續(xù)擴(kuò)大服務(wù)區(qū)域并繼續(xù)獲得客戶的支持與信任!

將排序(一般按時(shí)間排)后的數(shù)據(jù)按某字段變化分組統(tǒng)計(jì),也就是分組字段值與上一行的值比較,如果相同則分到與上一行同組,不同時(shí)則創(chuàng)建一個(gè)新組。

這個(gè)問題用SQL來(lái)做很難!

SQL的集合是無(wú)序的,早期SQL沒有相鄰行引用的方法。SQL2003標(biāo)準(zhǔn)中加入了窗口函數(shù),能引用相鄰行,但分組仍然非常困難,需要用子查詢?nèi)藶樵斐龇纸M序號(hào)。

舉個(gè)例子:查詢?nèi)藛T某段時(shí)間所處城市,并列出起始和結(jié)束時(shí)間。現(xiàn)有數(shù)據(jù)庫(kù)表footmark數(shù)據(jù)如下:

NAMEFOOTDATECITY
Tom    2020-01-02 08:30:00Beijing
Tom    2020-01-03 08:30:00Beijing
Tom    2020-01-04 13:30:05Beijing
Tom    2020-01-04 16:36:00Chengdu
Tom    2020-01-05 08:30:00Chengdu
Tom    2020-01-06 12:30:00Chengdu
Tom    2020-01-06 17:30:25Beijing
Tom    2020-01-07 09:30:05Beijing
Tom    2020-01-09 16:30:00Beijing

要求最終分組統(tǒng)計(jì)的結(jié)果如下:

NAMECITYSTARTDATEENDDATE
TomBeijing2020-01-02 08:30:002020-01-04 13:30:05
Tom    Chengdu2020-01-04 16:36:002020-01-06 12:30:00
Tom    Beijing2020-01-06 17:30:252020-01-09 16:30:00

以O(shè)racle為例,用SQL寫出來(lái)是這樣:

WITH A AS

       ( SELECT NAME, FOOTDATE, CITY,

              CASE WHEN CITY=LAG(CITY) OVER (PARTITION BY NAME ORDER BY FOOTDATE) THEN 0 ELSE ROWNUM END FLAG

       FROM FOOTMARK ORDER BY NAME, FOOTDATE),

B AS

       ( SELECT NAME, FOOTDATE, CITY,

              MAX(FLAG) OVER (PARTITION BY NAME ORDER BY FOOTDATE) FLAG

       FROM A),

C AS

       ( SELECT NAME, CITY, FLAG,

MIN(FOOTDATE) STARTDATE,

MAX(FOOTDATE) ENDDATE

       FROM B

GROUP BY NAME, CITY, FLAG

ORDER BY NAME, FLAG )

SELECT NAME, CITY, STARTDATE, ENDDATE FROM C;

這里的FLAG就是人為造出的分組序號(hào),這種SQL既難寫又難懂。

對(duì)于這種按順序分組,如果使用集算器的SPL語(yǔ)言就會(huì)簡(jiǎn)單很多,只需1行代碼:

connect("mydb").query("SELECT * FROM FOOTMARK ORDER BY NAME,FOOTDATE").groups@o(NAME,CITY;min(FOOTDATE):STARTDATE,max(FOOTDATE):ENDDATE)

SPL基于有序集合實(shí)現(xiàn),提供了按有序分組的選項(xiàng)@o,解決這個(gè)問題非常容易。

SPL提供了等值分組、有序分組、有序條件分組、序號(hào)分組、嵌套分組、大數(shù)據(jù)有序分組、大數(shù)據(jù)有序條件分組等多種分組方式。

集算器 SPL 是解決 SQL 難題的專業(yè)腳本語(yǔ)言,它語(yǔ)法簡(jiǎn)單,符合自然思維,是天然分步、層次清晰的面向過(guò)程計(jì)算語(yǔ)言。它采用與數(shù)據(jù)庫(kù)無(wú)關(guān)的統(tǒng)一語(yǔ)法,編寫的算法可在數(shù)據(jù)庫(kù)間無(wú)縫遷移。它是桌面級(jí)計(jì)算工具,即裝即用,配置簡(jiǎn)單,調(diào)試功能完善,可設(shè)置斷點(diǎn)、單步執(zhí)行,每步執(zhí)行結(jié)果都可查看。

看完上述內(nèi)容,你們對(duì)SQL怎么在時(shí)間序列中根據(jù)字段變化分組有進(jìn)一步的了解嗎?如果還想了解更多知識(shí)或者相關(guān)內(nèi)容,請(qǐng)關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝大家的支持。

新聞標(biāo)題:SQL怎么在時(shí)間序列中根據(jù)字段變化分組
URL標(biāo)題:http://bm7419.com/article20/igspco.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供Google、網(wǎng)站收錄、云服務(wù)器、移動(dòng)網(wǎng)站建設(shè)、網(wǎng)站維護(hù)、外貿(mào)網(wǎng)站建設(shè)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

商城網(wǎng)站建設(shè)