今天就跟大家聊聊有關(guān)SQL怎么在時間序列中根據(jù)字段變化分組,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結(jié)了以下內(nèi)容,希望大家根據(jù)這篇文章可以有所收獲。
創(chuàng)新互聯(lián)建站服務(wù)項目包括桑珠孜網(wǎng)站建設(shè)、桑珠孜網(wǎng)站制作、桑珠孜網(wǎng)頁制作以及桑珠孜網(wǎng)絡(luò)營銷策劃等。多年來,我們專注于互聯(lián)網(wǎng)行業(yè),利用自身積累的技術(shù)優(yōu)勢、行業(yè)經(jīng)驗、深度合作伙伴關(guān)系等,向廣大中小型企業(yè)、政府機構(gòu)等提供互聯(lián)網(wǎng)行業(yè)的解決方案,桑珠孜網(wǎng)站推廣取得了明顯的社會效益與經(jīng)濟效益。目前,我們服務(wù)的客戶以成都為中心已經(jīng)輻射到桑珠孜省份的部分城市,未來相信會繼續(xù)擴大服務(wù)區(qū)域并繼續(xù)獲得客戶的支持與信任!
將排序(一般按時間排)后的數(shù)據(jù)按某字段變化分組統(tǒng)計,也就是分組字段值與上一行的值比較,如果相同則分到與上一行同組,不同時則創(chuàng)建一個新組。
這個問題用SQL來做很難!
SQL的集合是無序的,早期SQL沒有相鄰行引用的方法。SQL2003標(biāo)準(zhǔn)中加入了窗口函數(shù),能引用相鄰行,但分組仍然非常困難,需要用子查詢?nèi)藶樵斐龇纸M序號。
舉個例子:查詢?nèi)藛T某段時間所處城市,并列出起始和結(jié)束時間。現(xiàn)有數(shù)據(jù)庫表footmark數(shù)據(jù)如下:
NAME | FOOTDATE | CITY |
Tom | 2020-01-02 08:30:00 | Beijing |
Tom | 2020-01-03 08:30:00 | Beijing |
Tom | 2020-01-04 13:30:05 | Beijing |
Tom | 2020-01-04 16:36:00 | Chengdu |
Tom | 2020-01-05 08:30:00 | Chengdu |
Tom | 2020-01-06 12:30:00 | Chengdu |
Tom | 2020-01-06 17:30:25 | Beijing |
Tom | 2020-01-07 09:30:05 | Beijing |
Tom | 2020-01-09 16:30:00 | Beijing |
… | … | … |
要求最終分組統(tǒng)計的結(jié)果如下:
NAME | CITY | STARTDATE | ENDDATE |
Tom | Beijing | 2020-01-02 08:30:00 | 2020-01-04 13:30:05 |
Tom | Chengdu | 2020-01-04 16:36:00 | 2020-01-06 12:30:00 |
Tom | Beijing | 2020-01-06 17:30:25 | 2020-01-09 16:30:00 |
以O(shè)racle為例,用SQL寫出來是這樣:
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就是人為造出的分組序號,這種SQL既難寫又難懂。
對于這種按順序分組,如果使用集算器的SPL語言就會簡單很多,只需1行代碼:
connect("mydb").query("SELECT * FROM FOOTMARK ORDER BY NAME,FOOTDATE").groups@o(NAME,CITY;min(FOOTDATE):STARTDATE,max(FOOTDATE):ENDDATE)
SPL基于有序集合實現(xiàn),提供了按有序分組的選項@o,解決這個問題非常容易。
SPL提供了等值分組、有序分組、有序條件分組、序號分組、嵌套分組、大數(shù)據(jù)有序分組、大數(shù)據(jù)有序條件分組等多種分組方式。
集算器 SPL 是解決 SQL 難題的專業(yè)腳本語言,它語法簡單,符合自然思維,是天然分步、層次清晰的面向過程計算語言。它采用與數(shù)據(jù)庫無關(guān)的統(tǒng)一語法,編寫的算法可在數(shù)據(jù)庫間無縫遷移。它是桌面級計算工具,即裝即用,配置簡單,調(diào)試功能完善,可設(shè)置斷點、單步執(zhí)行,每步執(zhí)行結(jié)果都可查看。
看完上述內(nèi)容,你們對SQL怎么在時間序列中根據(jù)字段變化分組有進一步的了解嗎?如果還想了解更多知識或者相關(guān)內(nèi)容,請關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝大家的支持。
新聞標(biāo)題:SQL怎么在時間序列中根據(jù)字段變化分組
URL標(biāo)題:http://aaarwkj.com/article20/igspco.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供Google、網(wǎng)站收錄、云服務(wù)器、移動網(wǎng)站建設(shè)、網(wǎng)站維護、外貿(mào)網(wǎng)站建設(shè)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)