MySql實現(xiàn)ROW_NUMBER()開窗函數(shù)

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

準(zhǔn)備數(shù)據(jù)
select * from test_biz_policy_policy;
platform_id(平臺id) publish_time(政策發(fā)布時間) 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測試
8 2019-04-02 19:17:31 xxx
8 2019-04-02 19:17:31 ccc
8 2019-04-02 19:17:31 測試114
8 2019-04-02 19:17:31 測試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
需求

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

代碼
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(平臺id) publish_time(政策發(fā)布時間) 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測試
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é)果看來,需求已實現(xiàn)。

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

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

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

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