看到很多人对于keep不理解,这里解释一下!

Returns the row ranked first using DENSE_RANK
2种取值:
DENSE_RANK FIRST
DENSE_RANK LAST

keep (DENSE_RANK first ORDER BY sl) 结果集中再取max、min的例子。

SQL> select * from test;

ID MC SL
-------------------- -------------------- -------------------
1 111 1
1 222 1
1 333 2
1 555 3
1 666 3
2 111 1
2 222 1
2 333 2
2 555 2

9 rows selected

SQL> 
SQL> select id,mc,sl,
2 min(mc) keep (DENSE_RANK first ORDER BY sl) over(partition by id),
3 max(mc) keep (DENSE_RANK last ORDER BY sl) over(partition by id)
4 from test
5 ;

ID MC SL MIN(MC)KEEP(DENSE_RANKFIRSTORD MAX(MC)KEEP(DENSE_RANKLASTORDE
-------------------- -------------------- ------------------- ------------------------------ ------------------------------
1 111 1 111 666
1 222 1 111 666
1 333 2 111 666
1 555 3 111 666
1 666 3 111 666
2 111 1 111 555
2 222 1 111 555
2 333 2 111 555
2 555 2 111 555

9 rows selected

SQL>

不要混淆keep内(firstlast)外(min、max或者其他):
min是可以对应last
max是可以对应first

SQL> select id,mc,sl,
2 min(mc) keep (DENSE_RANK first ORDER BY sl) over(partition by id),
3 max(mc) keep (DENSE_RANK first ORDER BY sl) over(partition by id),
4 min(mc) keep (DENSE_RANK last ORDER BY sl) over(partition by id),
5 max(mc) keep (DENSE_RANK last ORDER BY sl) over(partition by id)
6 from test
7 ;

ID MC SL MIN(MC)KEEP(DENSE_RANKFIRSTORD MAX(MC)KEEP(DENSE_RANKFIRSTORD MIN(MC)KEEP(DENSE_RANKLASTORDEMAX(MC)KEEP(DENSE_RANKLASTORDE
-------------------- -------------------- ------------------- ------------------------------ ------------------------------ ------------------------------ ------------------------------
1 111 1 111 222 555 666
1 222 1 111 222 555 666
1 333 2 111 222 555 666
1 555 3 111 222 555 666
1 666 3 111 222 555 666
2 111 1 111 222 333 555
2 222 1 111 222 333 555
2 333 2 111 222 333 555
2 555 2 111 222 333 555

9 rows selected

SQL> select id,mc,sl,
2 min(mc) keep (DENSE_RANK first ORDER BY sl) over(partition by id),
3 max(mc) keep (DENSE_RANK first ORDER BY sl) over(partition by id),
4 min(mc) keep (DENSE_RANK last ORDER BY sl) over(partition by id),
5 max(mc) keep (DENSE_RANK last ORDER BY sl) over(partition by id)
6 from test
7 ;

ID MC SL MIN(MC)KEEP(DENSE_RANKFIRSTORD MAX(MC)KEEP(DENSE_RANKFIRSTORD MIN(MC)KEEP(DENSE_RANKLASTORDEMAX(MC)KEEP(DENSE_RANKLASTORDE
-------------------- -------------------- ------------------- ------------------------------ ------------------------------ ------------------------------ ------------------------------
1 111 1 111 222 555 666
1 222 1 111 222 555 666
1 333 2 111 222 555 666
1 555 3 111 222 555 666
1 666 3 111 222 555 666

2 111 1 111 222 333 555
2 222 1 111 222 333 555
2 333 2 111 222 333 555
2 555 2 111 222 333 555

min(mc) keep (DENSE_RANK first ORDER BY sl) over(partition by id):id等于1的数量最小的(DENSE_RANK first )为
1 111 1 
1 222 1 
在这个结果中取min(mc) 就是111
max(mc) keep (DENSE_RANK first ORDER BY sl) over(partition by id)
取max(mc) 就是222;
min(mc) keep (DENSE_RANK last ORDER BY sl) over(partition by id):id等于1的数量最大的(DENSE_RANK first )为
1 555 3 
1 666 3 
在这个结果中取min(mc) 就是222,取max(mc)就是666

最新文章

  1. Jmeter plugin jp@gc - PerfMon Metrics Collector
  2. Android的系统属性SystemProperties
  3. Qt之启动外部程序(调用cmd.exe ping putty winscp 管道等等,比较牛叉)
  4. UVaLive4043 UVa1411 Ants 巨人与鬼
  5. git 错误
  6. angular ng build --prod 打包报错解决方案
  7. Kotlin For Android 示例代码实战
  8. POJ-2796 & 2019南昌邀请赛网络赛 I. 区间最大min*sum
  9. 零配置使用springboot
  10. swift4.2 - 距离传感器
  11. Influxdb安装部署
  12. RabbitMQ消费端消息的获取方式(.Net Core)
  13. learning shell args handing key=value example (2)
  14. Jenkins 配合 GitLab 实现分支的自动合并、自动创建 Tag
  15. selenium测试(Java)--操作cookie(十七)
  16. Linux jdk环境配置模板
  17. POI 2018.10.20
  18. 使用John the ripper工具来尝试破解Linux密码
  19. ActionChains报错问题总结
  20. POP-一个点击带有放大还原的动画效果

热门文章

  1. Python反转过程学习
  2. jsp (1)
  3. AtCoder arc061C Snuke's Subway Trip
  4. A1014. Waiting in Line
  5. RAP Mock.js语法规范
  6. bs4抓取糗事百科
  7. pthread_create()
  8. feemarker知识
  9. TestNg-数据驱动-dataProvider
  10. C# 封装SqlBulkCopy,让批量插入更方便