基于近3个月频次的ID维度IP排名需求
按ID维度对IP登录频次进行排名的实现方案
需求说明
- 按每个
ID分组,基于近3个月内的IP登录频次(即Count_of_Logins_Three_Months_Prior字段)进行排名 - 频次最高的IP排名为1,频次越低排名越靠后
- 若多个IP的登录频次相同,则分配相同排名(并列排名后,后续排名不会跳跃,如两个并列第1,下一个为第2)
实现代码(SQL)
不同SQL方言的窗口函数语法略有差异,以下是主流数据库的实现方式:
MySQL 8.0+/PostgreSQL/SQL Server
SELECT ID, Login_TS_Three_Months_Prior, Login_TS, IP, Count_of_Logins_Three_Months_Prior, DENSE_RANK() OVER (PARTITION BY ID ORDER BY Count_of_Logins_Three_Months_Prior DESC) AS IP_Ranking FROM 你的输入表名;
说明:如果需要跳跃式排名(如两个并列第1后,下一个为第3),可将
DENSE_RANK()替换为RANK()函数
旧版MySQL(无窗口函数)
SELECT t1.ID, t1.Login_TS_Three_Months_Prior, t1.Login_TS, t1.IP, t1.Count_of_Logins_Three_Months_Prior, (SELECT COUNT(DISTINCT t2.Count_of_Logins_Three_Months_Prior) FROM 你的输入表名 t2 WHERE t2.ID = t1.ID AND t2.Count_of_Logins_Three_Months_Prior >= t1.Count_of_Logins_Three_Months_Prior) AS IP_Ranking FROM 你的输入表名 t1 ORDER BY t1.ID, IP_Ranking;
示例输入输出表
输入表
| ID | Login_TS_Three_Months_Prior | Login_TS | IP | Count_of_Logins_Three_Months_Prior |
|---|---|---|---|---|
| 101 | 2024-01-01 00:00:00 | 2024-04-05 08:30:00 | 192.168.1.1 | 15 |
| 101 | 2024-01-01 00:00:00 | 2024-04-03 10:15:00 | 192.168.1.2 | 15 |
| 101 | 2024-01-01 00:00:00 | 2024-04-01 14:20:00 | 192.168.1.3 | 8 |
| 102 | 2024-01-10 00:00:00 | 2024-04-06 09:00:00 | 10.0.0.1 | 22 |
| 102 | 2024-01-10 00:00:00 | 2024-04-04 16:45:00 | 10.0.0.2 | 12 |
| 102 | 2024-01-10 00:00:00 | 2024-04-02 11:30:00 | 10.0.0.3 | 12 |
输出表(使用DENSE_RANK()的结果)
| ID | Login_TS_Three_Months_Prior | Login_TS | IP | Count_of_Logins_Three_Months_Prior | IP_Ranking |
|---|---|---|---|---|---|
| 101 | 2024-01-01 00:00:00 | 2024-04-05 08:30:00 | 192.168.1.1 | 15 | 1 |
| 101 | 2024-01-01 00:00:00 | 2024-04-03 10:15:00 | 192.168.1.2 | 15 | 1 |
| 101 | 2024-01-01 00:00:00 | 2024-04-01 14:20:00 | 192.168.1.3 | 8 | 2 |
| 102 | 2024-01-10 00:00:00 | 2024-04-06 09:00:00 | 10.0.0.1 | 22 | 1 |
| 102 | 2024-01-10 00:00:00 | 2024-04-04 16:45:00 | 10.0.0.2 | 12 | 2 |
| 102 | 2024-01-10 00:00:00 | 2024-04-02 11:30:00 | 10.0.0.3 | 12 | 2 |
内容的提问来源于stack exchange,提问作者Stanleyrr
相关产品推荐
相关产品推荐

