MySql實現ROW NUMBER 開窗函式

2021-09-17 20:35:56 字數 2655 閱讀 2432

本文咱們使用mysql實現開窗函式row_number() over (partition by ***,*** order by ***),廢話不多說,直接開幹

準備資料

select * from test_biz_policy_policy;
platform_id(平台id)

publish_time(政策發布時間)

policy_name(政策名稱)

22019-04-01 15:11:06

test0

22019-04-01 19:11:06

test9

22019-04-01 19:11:06

test8

22019-04-01 18:11:06

test7

22019-04-01 15:11:06

test1

22019-04-01 15:11:06

test2

22019-04-01 16:11:06

test3

22019-04-01 16:11:06

test4

22019-04-01 16:11:06

test5

22019-04-01 17:11:06

test6

82019-04-02 19:17:31

fengyu

82019-04-02 19:17:31

新建政策1111111

82019-04-02 19:17:31

1218測試

82019-04-02 19:17:31

***8

2019-04-02 19:17:31

ccc8

2019-04-02 19:17:31

測試114

82019-04-02 19:17:31

測試mmm

82019-04-02 19:17:31

k k k k k k k

82019-04-02 19:17:31

k k k k k k k明明

82019-04-02 19:17:31

ceshi111

需求簡而言之,就是以「平台id」,「政策發布時間」分組,根據「政策名稱」進行排序,取政策前三名。

**

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

結果

platform_id(平台id)

publish_time(政策發布時間)

policy_name(政策名稱)

22019-04-01 15:11:06

test0

22019-04-01 15:11:06

test1

22019-04-01 15:11:06

test2

22019-04-01 16:11:06

test3

22019-04-01 16:11:06

test4

22019-04-01 16:11:06

test5

22019-04-01 17:11:06

test6

22019-04-01 18:11:06

test7

22019-04-01 19:11:06

test8

22019-04-01 19:11:06

test9

82019-04-02 19:17:31

1218測試

82019-04-02 19:17:31

ccc8

2019-04-02 19:17:31

ceshi111

82019-04-02 19:17:31

fengyu

82019-04-02 19:17:31

k k k k k k k

總結從上面的結果看來,需求已實現。

SQL使用Apply實現row number效果

sql server 2005 新增cross可以參見文章 需求 不同班級的同學,成績對應不同等級,且不同等級的數量還不同。如1班分 90分優秀,80分良好,70中等,60分及格四擋,2班分,85分良好,60及格兩檔。有表如下,簡易的表,如果需要輔助列可以隨便加的。人員表eid score did ...

sql中用CTE實現增加row number 列

增加一列 alter table table1 add id int default 0 用cte更新建立的這個id列 with cte as select rn row number over order by getdate from table1 update cte set id rn 補充...

mysql連線實現 MySql實現遠端連線

1 進入mysql,建立乙個新使用者root,密碼為root 格式 grant 許可權 on 資料庫名.表名 to 使用者 登入主機 identified by 使用者密碼 grant select,update,insert,delete on to root 192.168.1.12 ident...