MySql實(shí)現(xiàn)ROW_NUMBER()開(kāi)窗函數(shù)

本文咱們使用mysql實(shí)現(xiàn)開(kāi)窗函數(shù)row_number() over (partition by xxx,xxx order by xxx),廢話不多說(shuō),直接開(kāi)干

準(zhǔn)備數(shù)據(jù)
select * from test_biz_policy_policy;
platform_id(平臺(tái)id) publish_time(政策發(fā)布時(shí)間) policy_name(政策名稱)
2 2019-04-01 15:11:06 test0
2 2019-04-01 19:11:06 test9
2 2019-04-01 19:11:06 test8
2 2019-04-01 18:11:06 test7
2 2019-04-01 15:11:06 test1
2 2019-04-01 15:11:06 test2
2 2019-04-01 16:11:06 test3
2 2019-04-01 16:11:06 test4
2 2019-04-01 16:11:06 test5
2 2019-04-01 17:11:06 test6
8 2019-04-02 19:17:31 fengyu
8 2019-04-02 19:17:31 新建政策1111111
8 2019-04-02 19:17:31 1218測(cè)試
8 2019-04-02 19:17:31 xxx
8 2019-04-02 19:17:31 ccc
8 2019-04-02 19:17:31 測(cè)試114
8 2019-04-02 19:17:31 測(cè)試mmm
8 2019-04-02 19:17:31 k k k k k k k
8 2019-04-02 19:17:31 k k k k k k k明明
8 2019-04-02 19:17:31 ceshi111
需求

簡(jiǎn)而言之,就是以「平臺(tái)id」,「政策發(fā)布時(shí)間」分組,根據(jù)「政策名稱」進(jìn)行排序,取政策前三名。

代碼
SELECT
    t.platform_id,
    t.publish_time,
    t.policy_name,
    t.rank_no 
FROM
    (
    SELECT
        a.platform_id,
        a.publish_time,
        a.policy_name,
    IF
        (
            @str1 = a.platform_id 
            AND @str2 = a.publish_time,
            @rank := @rank + 1,
            @rank := 1 
        ) AS rank_no,
        @str1 := a.platform_id,
        @str2 := a.publish_time 
    FROM
        (
        SELECT
            platform_id,
            publish_time,
            policy_name 
        FROM
            test_biz_policy_policy 
        ORDER BY
            platform_id,
            publish_time,
            policy_name ASC 
        ) a,
        (
        SELECT
            @str1 := 0,
            @str2 := NULL,
            @rank := 0 
        ) tmp 
    ) t 
WHERE
    t.rank_no <= 5
結(jié)果
platform_id(平臺(tái)id) publish_time(政策發(fā)布時(shí)間) policy_name(政策名稱)
2 2019-04-01 15:11:06 test0
2 2019-04-01 15:11:06 test1
2 2019-04-01 15:11:06 test2
2 2019-04-01 16:11:06 test3
2 2019-04-01 16:11:06 test4
2 2019-04-01 16:11:06 test5
2 2019-04-01 17:11:06 test6
2 2019-04-01 18:11:06 test7
2 2019-04-01 19:11:06 test8
2 2019-04-01 19:11:06 test9
8 2019-04-02 19:17:31 1218測(cè)試
8 2019-04-02 19:17:31 ccc
8 2019-04-02 19:17:31 ceshi111
8 2019-04-02 19:17:31 fengyu
8 2019-04-02 19:17:31 k k k k k k k
總結(jié)

從上面的結(jié)果看來(lái),需求已實(shí)現(xiàn)。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 窗口函數(shù)是 SQL2003 標(biāo)準(zhǔn)才開(kāi)始有的一系列 SQL 函數(shù),用于應(yīng)付一些復(fù)雜運(yùn)算是比較方便。但是普遍使用的 M...
    小黃鴨呀閱讀 1,656評(píng)論 0 0
  • pyspark.sql模塊 模塊上下文 Spark SQL和DataFrames的重要類: pyspark.sql...
    mpro閱讀 9,902評(píng)論 0 13
  • 這一周主要學(xué)習(xí)了 Hive 的一些基礎(chǔ)知識(shí),學(xué)習(xí)了多個(gè) Hive 窗口函數(shù),雖然感覺(jué)這些窗口函數(shù)沒(méi)有實(shí)際的應(yīng)用...
    大石兄閱讀 2,942評(píng)論 2 8
  • 分析函數(shù),也稱為窗口函數(shù),通常被認(rèn)為僅對(duì)數(shù)據(jù)倉(cāng)庫(kù)SQL有用。使用分析函數(shù)的查詢,基于對(duì)數(shù)據(jù)行的分組來(lái)計(jì)算總量值。與...
    貓貓_tomluo閱讀 3,464評(píng)論 3 18
  • 杉鄉(xiāng)神韻 文/龍行空 移動(dòng)歷史的坐標(biāo) 那繁榮的木材時(shí)代 似乎是 定格的輝煌| 春風(fēng)仍舊不減當(dāng)年 一個(gè) 演繹生命的綠...
    游離塵埃閱讀 295評(píng)論 9 32

友情鏈接更多精彩內(nèi)容