国产精品久久久aaaa,日日干夜夜操天天插,亚洲乱熟女香蕉一区二区三区少妇,99精品国产高清一区二区三区,国产成人精品一区二区色戒,久久久国产精品成人免费,亚洲精品毛片久久久久,99久久婷婷国产综合精品电影,国产一区二区三区任你鲁

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

通過SQL計算同時在線問題

數據分析與開發 ? 來源:CSDN博客 ? 作者:石榴公子YYDS ? 2021-09-30 14:22 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

本文是通過 SQL 計算同時在線問題,即求最高在線人數以及最高峰時間段。

0 需求分析

數據為主播ID,stt表示開播時間,edt表示下播時間。

idsttedt

10012021-06-14 12122021-06-14 1812

10032021-06-14 13122021-06-14 1612

10042021-06-14 13122021-06-14 2012

10022021-06-14 15122021-06-14 1612

10052021-06-14 15122021-06-14 2012

10012021-06-14 20122021-06-14 2312

10062021-06-14 21122021-06-14 2312

10072021-06-14 22122021-06-14 2312

求:

(1)該平臺某一天主播同時在線人數最高為多少?

(2)出現最高峰的時間段是哪個時間?

1 數據準備

(1)數據

vim play.txt

idstt edt

10012021-06-14 1212 2021-06-14 1812

10032021-06-14 13122021-06-14 1612

10042021-06-14 13122021-06-14 2012

10022021-06-14 15122021-06-14 1612

10052021-06-14 15122021-06-14 2012

10012021-06-14 20122021-06-14 2312

10062021-06-14 21122021-06-14 2312

10072021-06-14 22122021-06-14 2312

(2) 建表

create table if not exists play(

id string,

stt string,

edt string

row format delimitedfields terminated by ‘ ’

;

(3 )加載數據

load data local inpath “/home/centos/dan_test/play.txt” into table play;

(4) 查詢數據

hive》 select * from play;

OK

1001 2021-06-14 12:12:12 2021-06-14 18:12:121003 2021-06-14 13:12:12 2021-06-14 16:12:121004 2021-06-14 13:15:12 2021-06-14 20:12:121002 2021-06-14 15:12:12 2021-06-14 16:12:121005 2021-06-14 15:18:12 2021-06-14 20:12:121001 2021-06-14 20:12:12 2021-06-14 23:12:121006 2021-06-14 21:12:12 2021-06-14 23:15:121007 2021-06-14 22:12:12 2021-06-14 23:10:12

Time taken: 0.087 seconds, Fetched: 8 row(s)

2 數據分析

問題1分析:

本題如果直接從SQL本身很難下手,無從做起,不妨我們換個思路,假定我們拿到的是一條數據,現在用java程序怎么做?其實就是一個累加器的思想(如SPARK的累加器)。首先我們需要將這樣一條記錄進行拆分,分成不同的記錄或數據流進入累加器,然后給每條記錄進行標記,如果開播的話該條記錄記為1,下播的話記為-1,此時的數據流按照時間順序依次進入累加器,然后在累加器中進行疊加,其中累計的結果最大時候就是所求的結果。其實本質是利用累加器思想,但進入累加器的數據是按時間排好序的時序流數據(數據進入按時間先后順序進入)。

上述思路總結如下:

(1)將數據切分(按起始時間和結束時間)

(2)數據進行標簽,開播的記錄為記為1,下播的記錄記為-1用于累加

(2)將數據按時間進行排序

(3)數據進入累加器進行累加

(4)獲取累加器中當前累加值最大的數值

有了以上思路后,我們將其轉換為SQL求解思路。

(1)將數據切分:實際上就是將開播時間和下播時間轉換成一條條記錄。也就是列轉行,我們用熟悉的UNION操作,進行轉換。

select id,stt dt from play

unionselect id,edt dt from play

--------------------------------------------------------------------------------

OK

1001 2021-06-14 12:12:121001 2021-06-14 18:12:121001 2021-06-14 20:12:121001 2021-06-14 23:12:121002 2021-06-14 15:12:121002 2021-06-14 16:12:121003 2021-06-14 13:12:121003 2021-06-14 16:12:121004 2021-06-14 13:15:121004 2021-06-14 20:12:121005 2021-06-14 15:18:121005 2021-06-14 20:12:121006 2021-06-14 21:12:121006 2021-06-14 23:15:121007 2021-06-14 22:12:121007 2021-06-14 23:10:12

Time taken: 20.502 seconds, Fetched: 16 row(s)

(2) 數據標記。在上述SQL基礎上直接進行標記即可。如果數據本來就是分開的則用case when進行標記。

select id,stt dt , 1 flag from play

unionselect id,edt dt ,-1 flag from play

--------------------------------------------------------------------------------

OK

1001 2021-06-14 12:12:12 11001 2021-06-14 18:12:12 -11001 2021-06-14 20:12:12 11001 2021-06-14 23:12:12 -11002 2021-06-14 15:12:12 11002 2021-06-14 16:12:12 -11003 2021-06-14 13:12:12 11003 2021-06-14 16:12:12 -11004 2021-06-14 13:15:12 11004 2021-06-14 20:12:12 -11005 2021-06-14 15:18:12 11005 2021-06-14 20:12:12 -11006 2021-06-14 21:12:12 11006 2021-06-14 23:15:12 -11007 2021-06-14 22:12:12 11007 2021-06-14 23:10:12 -1

Time taken: 7.408 seconds, Fetched: 16 row(s)

(3)數據按照時間排序,進入累加器進行累加(按時間排序是累加的關鍵)

select id

,dt

,sum(flag) over(order by dt) as cur_cnt

from(

select id,stt dt , 1 flag from play

union

select id,edt dt ,-1 flag from play

) t

--------------------------------------------------------------------------------

OK

1001 2021-06-14 12:12:12 11003 2021-06-14 13:12:12 21004 2021-06-14 13:15:12 31002 2021-06-14 15:12:12 41005 2021-06-14 15:18:12 51002 2021-06-14 16:12:12 31003 2021-06-14 16:12:12 31001 2021-06-14 18:12:12 21001 2021-06-14 20:12:12 11004 2021-06-14 20:12:12 11005 2021-06-14 20:12:12 11006 2021-06-14 21:12:12 21007 2021-06-14 22:12:12 31007 2021-06-14 23:10:12 21001 2021-06-14 23:12:12 11006 2021-06-14 23:15:12 0

Time taken: 8.133 seconds, Fetched: 16 row(s)

(4) 獲取累加器中當前時刻累加的最大值,即為同時開播最多的人數

select max(cur_cnt)

from(

select id

,dt

,sum(flag) over(order by dt) as cur_cnt

from(

select id,stt dt , 1 flag from play

union

select id,edt dt ,-1 flag from play

) t

) m

--------------------------------------------------------------------------------

OK

5

Time taken: 13.087 seconds, Fetched: 1 row(s)

問題2分析:

第二問求的是出現高峰時的時間段,也就是高峰時間的起始時間及結束時間,或持續時長。

借鑒第一問的結果進行分析:

select *,max(cur_cnt) over()

from(

select id

,dt

,sum(flag) over(order by dt) as cur_cnt

from(

select id,stt dt , 1 flag from play

union

select id,edt dt ,-1 flag from play

) t

) m

通過上圖我們可以看出當由峰值出的記錄時間到下一條記錄人數減少的時候這一段時間即為峰值持續的時間,或高峰的時間段,也就是求出峰值的下一條記錄的時間與峰值對應記錄的時間即為高峰時間段,因此利用lead()函數很容易求出問題的答案。SQL如下:

select max_cur_cnt

,dt as start_time

,lead_dt as end_time

from(

select *

,lead(dt,1,dt) over(order by dt) lead_dt

from(

select *,max(cur_cnt) over() as max_cur_cnt

from(

select id

,dt

,flag

,sum(flag) over(order by dt) as cur_cnt

from(

select id,stt dt , 1 flag from play

union

select id,edt dt ,-1 flag from play

) t

) m

) n

) p

where cur_cnt=max_cur_cnt

計算結果如下:

--------------------------------------------------------------------------------

OK

5 2021-06-14 15:18:12 2021-06-14 16:12:12

Time taken: 17.513 seconds, Fetched: 1 row(s)

3 小結

本文針對SQL統計同時在線人數問題進行了分析,利用累加器思想對該問題進行求解,最終劃歸為時序數據,進行時序數據分析(常用技巧:打標簽,形成序列,多序列進行分析),最后利用sum() over()對標簽進行累加求出當前在線人數本題最關鍵的點在于轉換為時序數據及累加器的思想,望讀者能夠掌握。

事實上該問題的分析在業務上具有重要的意義,我們能夠實時跟蹤隨著時間變化的在線人數,了解服務器的負載變化情況,服務器的實時并發數等。該問題在不同業務場景下,有不同意義,比如某個游戲的同時在線人數,比如某個服務器的實時并發數,比如某個倉庫的貨物積壓數量,某一段時間內的同時處于服務過程中的最大訂單量等。實際上求最大在線人數和求實時在線人數是一回事,最大人數依賴于當前在線人數表,只有先求出當前在線人數表,才能求出最大同時在線人數。

不謀全局者,不足以謀一域。

不謀萬世者,不足以謀一時。

作者: 石榴公子YYDS

https://blog.csdn.net/godlovedaniel/article/details/118651811

責任編輯:haq

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 數據
    +關注

    關注

    8

    文章

    7335

    瀏覽量

    94770
  • SQL
    SQL
    +關注

    關注

    1

    文章

    789

    瀏覽量

    46700

原文標題:3 小結

文章出處:【微信號:DBDevs,微信公眾號:數據分析與開發】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    KM在線監測實現設備高效管理#在線監測

    在線監測
    KM預測性維護專家
    發布于 :2026年02月27日 14:24:25

    使用NVIDIA Nemotron RAG和Microsoft SQL Server 2025構建高性能AI應用

    在 Microsoft Ignite 2025 大會上,隨著 Microsoft SQL Server 2025 的發布,AI 就緒型企業數據庫愿景成為現實,為開發者提供強大的新工具,例如內置向量
    的頭像 發表于 12-01 09:31 ?791次閱讀
    使用NVIDIA Nemotron RAG和Microsoft <b class='flag-5'>SQL</b> Server 2025構建高性能AI應用

    KM在線監測方案保障水泵安全生產#在線監測

    在線監測
    KM預測性維護專家
    發布于 :2025年11月28日 09:18:13

    如何計算適合電能質量在線監測裝置的外部UPS容量?

    計算適合電能質量在線監測裝置的外部 UPS 容量,核心邏輯是 **“覆蓋總功率需求 + 預留冗余”**,需通過 “確定總功率→引入功率因數→疊加冗余→匹配標準規格” 四步完成,關鍵是不能僅計算
    的頭像 發表于 11-05 11:11 ?629次閱讀

    電纜隧道在線監測的技術及其應用難點

    電纜隧道在線監測是保障電纜隧道運行安全的一種有效方法,其通過集成應用多種技術(如物聯網、云計算及智能分析、傳感器等),在實現故障預防與快速定位的同時,提升運維效率,保障安全。此外也在很
    的頭像 發表于 10-24 11:14 ?305次閱讀
    電纜隧道<b class='flag-5'>在線</b>監測的技術及其應用難點

    不用編程不用聯網,實現倍福(BECKHOFF)PLC對接SQL數據庫,上報和查詢數據的案例

    的數值;查看過程數據(工具->網關數據監控):顯示當前任務組對應的過程數據, 即SQL語句。 倍福PLC內需要添加智能網關的IP地址,同時要確認PLC的AMS ID,AMS網絡端口等參數
    發表于 10-10 11:14

    破解平壓平模切機監測難題!KMPHM在線監測方案大揭秘 #在線監測

    在線監測
    KM預測性維護專家
    發布于 :2025年09月16日 16:26:25

    SQL 通用數據類型

    SQL 通用數據類型 數據庫表中的每個列都要求有名稱和數據類型。Each column in a database table is required to have a name and a
    的頭像 發表于 08-18 09:46 ?711次閱讀

    Text2SQL準確率暴漲22.6%!3大維度全拆

    基于 BIRD 數據集展開。 方法:提出 J-Schema 呈現數據庫結構并合理提供示例值,結合思維鏈引導模型推理。采用 Iterative DPO 迭代訓練,多輪迭代提升性能。用自洽性方法,通過硬 / 軟投票從多個候選答案中選最優,軟投票更優。 結果:解決 Text2SQL
    的頭像 發表于 08-14 11:17 ?704次閱讀
    Text2<b class='flag-5'>SQL</b>準確率暴漲22.6%!3大維度全拆

    不用編程序無需聯外網,將Rockwell羅克韋爾(AB)PLC的標簽數據存入SQL數據庫

    IGT-DSER網關的網口1,先配置網絡參數(默認IP:192.168.1.244,確認PC的網口與網關默認IP同網段),通過‘工具’->‘搜索在線網關’,搜索到網關后,修改IP地址等參數
    發表于 07-31 10:33

    無轉速傳感器抽油電機扭矩在線監測系統研究

    介紹了一種無轉速傳感器抽油機異步電機的在線監測系統的軟、硬件設計。論述了通過實時采集抽油機異步電機的三相電壓和電流,計算電機的三相有功功率、無功功率和功率因數的方法。并利用電機模型參數,根據抽油機
    發表于 07-14 17:56

    數據庫數據恢復—SQL Server數據庫被加密如何恢復數據?

    SQL Server數據庫故障: SQL Server數據庫被加密,無法使用。 數據庫MDF、LDF、log日志文件名字被篡改。
    的頭像 發表于 06-25 13:54 ?673次閱讀
    數據庫數據恢復—<b class='flag-5'>SQL</b> Server數據庫被加密如何恢復數據?

    達夢數據庫常用管理SQL命令詳解

    達夢數據庫常用管理SQL命令詳解
    的頭像 發表于 06-17 15:12 ?7183次閱讀
    達夢數據庫常用管理<b class='flag-5'>SQL</b>命令詳解

    大促數據庫壓力激增,如何一眼定位 SQL 執行來源?

    你是否曾經遇到過這樣的情況:在大促活動期間,用戶訪問量驟增,數據庫的壓力陡然加大,導致響應變慢甚至服務中斷?更讓人頭疼的是,當你試圖快速定位問題所在時,卻發現難以確定究竟是哪個業務邏輯中的 SQL
    的頭像 發表于 06-10 11:32 ?565次閱讀
    大促數據庫壓力激增,如何一眼定位 <b class='flag-5'>SQL</b> 執行來源?

    KMPHM在線監測系統 讓設備故障無處遁形#在線監測#振動在線監測

    在線監測
    KM預測性維護專家
    發布于 :2025年05月22日 16:30:08