国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Hive SQL必刷練習(xí)題:連續(xù)問題 & 間斷連續(xù)(*****)

這篇具有很好參考價值的文章主要介紹了Hive SQL必刷練習(xí)題:連續(xù)問題 & 間斷連續(xù)(*****)。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

問題描述:

1) 連續(xù)問題:找出連續(xù)三天(或者連續(xù)幾天的啥啥啥)。

2) 間斷連續(xù):統(tǒng)計各用戶連續(xù)登錄最長天數(shù),間斷一天也算連續(xù),比如1、3、4、6也算登陸了6天

問題分析:

這兩類問題,都是涉及到連續(xù),只不過連續(xù)類問題只要判斷出來相鄰的時間是和當(dāng)前行的時間挨著即可,而間斷連續(xù),是還可能在期間有中斷現(xiàn)象,并且即使中斷了,也要算在連續(xù)的時間內(nèi),比如1、3、4、6號登錄,但是算是連續(xù)登陸了6天。所以只要中斷不超過兩天,也能判斷出來是連續(xù)的,并且在計算連續(xù)天數(shù)的時候還要算上這個時間。

解決思路:

1)針對連續(xù)問題:

可以通過對每一個用戶id進(jìn)行開窗,然后排序里面的時間,加上row_number(),這樣對每一個日期都會有一個排序,之后將日期減去排序序號,只要這個值是一樣的,就說明這幾天是連續(xù)的。之后只要根據(jù)用戶id,以及這個減去過排序序號的差值diff進(jìn)行一起group by分組,然后通過having count(*) >= 3,這個篩選條件過濾出的結(jié)果就是最終連續(xù)登錄了三天的用戶

2)針對間斷連續(xù)問題:

? 也是對每一個用戶id進(jìn)行開窗,只不過這次是針對當(dāng)前行,用lag()取上一行數(shù)據(jù)?!颈仨氁瓷弦恍?,而不是看下一行,因為如果當(dāng)前行開始變化,當(dāng)前行需要記錄,如果看下一行,那看的是下一行有沒有變化,是不是不連續(xù)了之類的,下一行的情況無法記錄】。之后用當(dāng)天日期對這個用開窗函數(shù)得到的上一天日期進(jìn)行相減,如果大于2,就說明相鄰兩天的日期是超過了2天,按照定義不算是“連續(xù)”,所以增加個標(biāo)記,記錄為1,這樣每一行都會有一個標(biāo)記,如果是連續(xù)的,那這一行后面就標(biāo)記的0

? 接下來就是關(guān)鍵的步驟,根據(jù)**用戶id進(jìn)行開窗求sum聚合group by,然后從最開始的一行,到當(dāng)前行,進(jìn)行求sum。**這樣的話,原本是1、0、0、1、0、1、0,比如是這樣的標(biāo)記序列,每到一個1就說明從這天開始,就不是間斷一天連續(xù)了,然后從最開始一行到當(dāng)前行求sum的結(jié)果就是,1、1、1、2、2、3、3。這就很好的劃分出來三段“間斷連續(xù)時間”。

? 然后根據(jù)用戶id,以及這個標(biāo)記進(jìn)行分組聚合group by,求出來這個期間日期的max,以及日期的min,相減,別忘了再加1【日期計算時候需要注意的】,就是這個間斷連續(xù)的天數(shù)了。

總結(jié):

? 所以總的來說,要么就是用開窗函數(shù)對日期進(jìn)行排序,然后當(dāng)前日期減去排序序號,去看日期一樣的就是連續(xù)操作的記錄

? 當(dāng)然,如果想用統(tǒng)計間斷連續(xù)的方法去看連續(xù)n天的問題,也可以,就是取一個lag(),或者取一個lead(),進(jìn)行開窗,不用加標(biāo)記,直接一個where過濾diff=2,這就是統(tǒng)計連續(xù)3天的用戶,不過同一個用戶可能會有多個這個符合條件的,最后需要去重count(distinct(user_id)) 。如果是為了找到連續(xù)3天登錄過的用戶

? 要么就是利用開窗函數(shù)取得上一行l(wèi)ag()日期,兩個日期相減,去判斷是否符合條件,接下來加一個標(biāo)記,不符合的設(shè)為1,用作記錄改變的時間點,其余標(biāo)0。然后開窗函數(shù)對標(biāo)記進(jìn)行求和,是從第一條到當(dāng)前條,這樣就可以看出來一個用戶id,劃分了幾個連續(xù)時間段,然后再根據(jù)需求去具體的求。

然后上代碼:

1) 連續(xù):

Hive SQL必刷練習(xí)題:連續(xù)問題 & 間斷連續(xù)(*****),Hive SQL,hive,sql,hadoop文章來源地址http://www.zghlxwxcb.cn/news/detail-843763.html

2) 間斷連續(xù)

select
    user_id,
    max(recent_days) max_recent_days  --求出每個用戶最大的連續(xù)天數(shù)
from
(
    select
        user_id,
        user_flag,
        datediff(max(login_date),min(login_date)) + 1 recent_days --按照分組求每個用戶每次連續(xù)的天數(shù)(記得加1)
    from
    (
        select
            user_id,
            login_date,
            lag1_date,
            concat(user_id,'_',flag) user_flag --拼接用戶和標(biāo)簽分組
        from
        (
            select
                user_id,
                login_date,
                lag1_date,
                sum(if(datediff(login_date,lag1_date)>2,1,0)) over(partition by user_id order by login_date) flag  --獲取大于2的標(biāo)簽
            from
            (
                select
                    user_id,
                    login_date,
                    lag(login_date,1,'1970-01-01') over(partition by user_id order by login_date) lag1_date  --獲取上一次登錄日期
                from
                (
                    select
                        user_id,
                        date_format(login_datetime,'yyyy-MM-dd') login_date
                    from login_events
                    group by user_id,date_format(login_datetime,'yyyy-MM-dd')  --按照用戶和日期去重
                )t1
            )t2
        )t3
    )t4
    group by user_id,user_flag
)t5
group by user_id;
      )t2
        )t3
    )t4
    group by user_id,user_flag
)t5
group by user_id;

到了這里,關(guān)于Hive SQL必刷練習(xí)題:連續(xù)問題 & 間斷連續(xù)(*****)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進(jìn)行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • sql函數(shù)練習(xí)題

    sql函數(shù)練習(xí)題

    1. 計算用戶8月每天的練題數(shù)量 題目:現(xiàn)在運營想要計算出 2021年8月每天用戶練習(xí)題目的數(shù)量 ,請取出相應(yīng)數(shù)據(jù)。 示例:question_practice_detail id device_id question_id result date 1 2138 111 wrong 2021-05-03 2 3214 112 wrong 2021-05-09 3 3214 113 wrong 2021-06-15 4 6543 111 right 2021-08-13 5 2315 115 right 2021-08-1

    2024年02月07日
    瀏覽(20)
  • SQL經(jīng)典練習(xí)題

    SQL經(jīng)典練習(xí)題

    1.學(xué)生表 Student(SId,Sname,Sage,Ssex) SId 學(xué)生編號,Sname 學(xué)生姓名,Sage 出生年月,Ssex 學(xué)生性別 2.課程表 Course(CId,Cname,TId) CId 課程編號,Cname 課程名稱,TId 教師編號 3.教師表 Teacher(TId,Tname) TId 教師編號,Tname 教師姓名 4.成績表 SC(SId,CId,score) SId 學(xué)生編號,CId 課程編號,score 分?jǐn)?shù) 學(xué)生表 Studen

    2024年01月20日
    瀏覽(20)
  • sql練習(xí)題

    DQL練習(xí)1-學(xué)生表 ?? ?創(chuàng)建如下學(xué)生表? ?? ?create table student( ?? ?id int, ?? ?name varchar(20), ?? ?gender varchar(20), ?? ?chinese int, ?? ?math int, ?? ?english int ?? ?);?? ??? ? ?? ?? ?? ?insert into student values? ?? ?(1,\\\'張明\\\',\\\'男\(zhòng)\\',89,78,90), ?? ?(2,\\\'李進(jìn)\\\',\\\'男\(zhòng)\\',67,53,95), ?? ?(3,\\\'王五

    2024年02月16日
    瀏覽(24)
  • 50道SQL練習(xí)題

    50道SQL練習(xí)題

    https://www.bilibili.com/video/BV14h411R7F6/?p=4vd_source=76a21f3936db28f5e63b70544272d65e https://www.cnblogs.com/Diyo/p/11424844.html https://zhuanlan.zhihu.com/p/113173133 方法1:自連接 思路:先使用自連接score表找到01\\\"課程比\\\"02\\\"課程成績高的的學(xué)生id,然后關(guān)聯(lián)學(xué)生表獲取學(xué)生信息 方法二: 長形數(shù)據(jù)變成寬型數(shù)

    2024年02月09日
    瀏覽(73)
  • sql-50練習(xí)題16-20

    sql-50練習(xí)題16-20

    sql真的非常靈活,一個題目可能有很多很多種解法,我記錄的只是我自己的一個解題思路,如果大家有更好的不同解法歡迎在評論區(qū)一起探討 ps:有些題可能解法會重復(fù),比如求大于,我們下一個題可能是求小于,大家如果第一遍沒有做出來,看了我寫的之后有了思路,可以

    2024年02月06日
    瀏覽(22)
  • sql-50練習(xí)題11-15

    sql-50練習(xí)題11-15

    sql真的非常靈活,一個題目可能有很多很多種解法,我記錄的只是我自己的一個解題思路,如果大家有更好的不同解法歡迎在評論區(qū)一起探討 ps:有些題可能解法會重復(fù),比如求大于,我們下一個題可能是求小于,大家如果第一遍沒有做出來,看了我寫的之后有了思路,可以

    2024年02月06日
    瀏覽(20)
  • sql-50練習(xí)題6-10

    sql-50練習(xí)題6-10

    sql真的非常靈活,一個題目可能有很多很多種解法,我記錄的只是我自己的一個解題思路,如果大家有更好的不同解法歡迎在評論區(qū)一起探討 ps:有些題可能解法會重復(fù),比如求大于,我們下一個題可能是求小于,大家如果第一遍沒有做出來,看了我寫的之后有了思路,可以

    2024年02月08日
    瀏覽(20)
  • 【MySQL】- 05 sql 語句練習(xí)題

    【MySQL】- 05 sql 語句練習(xí)題

    查詢結(jié)果就不放了,語句是否成功運行,結(jié)果是否正確都容易自行判斷 –1. 學(xué)生表 Student(s_id,s_name,s_birth,s_sex) --學(xué)生編號,學(xué)生姓名, 出生年月,學(xué)生性別 –2. 課程表 Course(c_id,c_name,t_id) – --課程編號, 課程名稱, 教師編號 –3. 教師表 Teacher(t_id,t_name) --教師編號,教師姓名 –4. 成

    2024年02月08日
    瀏覽(22)
  • 【SQL每日一練】分組過濾練習(xí)題

    【SQL每日一練】分組過濾練習(xí)題

    題目:現(xiàn)在運營想查看每個學(xué)校用戶的平均發(fā)貼和回帖情況,尋找低活躍度學(xué)校進(jìn)行重點運營,請取出平均發(fā)貼數(shù)低于5的學(xué)?;蚱骄靥麛?shù)小于20的學(xué)校。 代碼如下: WHERE 無法與合計函數(shù)一起使用; SQL語句執(zhí)行順序 (8) SELECT (9) DISTINCT (1) FROM (3) JOIN (2) ON (4) WHERE (5) GR

    2024年04月23日
    瀏覽(41)
  • 【MySQL】- 05 sql 語句練習(xí)題(第二部分)

    20、 查詢學(xué)生的總成績并進(jìn)行排名 21、 查詢不同老師所教不同課程平均分從高到低顯示 22、 查詢所有課程的成績第2名到第3名的學(xué)生信息及該課程成績 23、 統(tǒng)計各科成績各分?jǐn)?shù)段人數(shù):課程編號,課程名稱,[100-85],[85-70],[70-60],[0-60]及所占百分比 24、 查詢學(xué)生平均成績及其名次

    2024年02月09日
    瀏覽(22)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包