本文咱們使用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...