开窗函数主要分为2类:

1.排序开窗函数:

rank() over(partition by xxx order by yyy)  //各分区按照yyy字段排序,如果yyy字段值一样,则rank值一样,且下一个序号为rank值加1,如1、2、2、3、4(假如分区一共有5条记录)

row_number() over(partition by xxx order by yyy)  //各分区按照yyy字段排序,即使yyy字段值一样,rank的值也不一样,从1一直往上加,如1、2、3、4、5

以上,partition by xxx 表示按照xxx字段分区(分区就是分组的意思),如果没有partition by子句的话,所有的记录当做一个分区。

2.聚合开窗函数:

sum(xxx) over(partition by yyy order by zzz)

count(1) over(partition by xxx order by yyy)

max(xxx) over(partition by yyy order by zzz)

min(xxx) over(partition by yyy order by zzz)

avg(xxx) over(partition by yyy order by zzz)

这5个聚合开窗函数用的时候再研究,粗略的看了一下各运行结果,跟平时的聚合函数有非常大的不同。

使用案例:

之前用group by分组时select的字段除了group by字段外,其他字段都要用聚合函数包起来(如果有的话),如count(1),sum(amount),max(created_date),这样对其他非分组字段的处理只能满足一些常规的需求,如分组查询created_date最大的那条记录

某红包项目

需求一:查询投保表中每个子红包最近一次的投保失败记录

with r as (
select child_redpacket_id, max(updated_date) from red_packet_customerinfo
where insure_status = -1
group by child_redpacket_id
)
select rpc.child_redpacket_id, rpc.error_msg, rpc.updated_date from red_packet_customerinfo rpc
where (rpc.child_redpacket_id, rpc.updated_date) in (select * from r)
order by rpc.updated_date desc, rpc.child_redpacket_id

需求二:查询投保表中每个子红包最近两次的投保失败记录

用group by 绞尽脑汁也想不出来怎么写,但是用row_number() over(...) 相当简单

row_number() over(partition by xxx order by yyy),按照xxx字段分组并且按照yyy字段排列,默认是升序排列,后面跟上desc则是降序排列

这样每一条记录都会增加一个row_number虚拟字段(可以重命名为任意字段),每一组row_number都是从1开始往上累计,且排序是按照yyy字段严格排序的。

这样满足需求二的sql就可以这样写:

with r as (
select rpc.*, row_number() over(partition by child_redpacket_id order by updated_date desc)
from red_packet_customerinfo rpc
where insure_status = -1
)
select r.child_redpacket_id, r.error_msg, r.updated_date from r
where r.row_number <= 2
order by r.updated_date desc, child_redpacket_id

json处理三部曲之第一曲:利用json-lib-xxx.jar处理json的更多相关文章

  1. json处理三部曲之第三曲:利用Gson处理json

    需要导入gson-xxx.jar包 <dependency> <groupId>com.google.code.gson</groupId> <artifac ...

  2. 利用PBFunc在Powerbuilder中解析Json对象

    利用PBFunc工具在Powerbuilder解析json,只需要调用getattribute方法来获取 解析unicode格式的json: n_pbfunc_json lnv_json lnv_js ...

  3. DELPHI XE10,JSON 生成和解析,再利用INDYHTTP控件POST

    Delphi XE10,Json 生成和解析,再利用indyhttp控件Post 年09月20日 :: 阅读数: --不多说,直接上代码 procedure TFrmMain.Brand; var J ...

  4. 利用FastJson,拼接复杂嵌套json数据&&直接从json字符串中(不依赖实体类)解析出键值对

    1.拼接复杂嵌套json FastJson工具包中有两主要的类: JSONObject和JSONArray ,前者表示json对象,后者表示json数组.他们两者都能添加Object类型的对象,但是J ...

  5. 基于json-lib-2.2.2-jdk15.jar的JSON解析工具类大集合

    json解析之前的必备工作:导入json解析必须的六个包 资源链接:百度云:链接:https://pan.baidu.com/s/1dAEQQy 密码:1v1z 代码示例: package com.s ...

  6. form 转json,将form表单中的数据序列化数组后转换为Json

    页面中引用了jquery,第一想到的就是序列化,但是序列化后的表单字段为a=1&b=2这种. 这里写一个jquery的扩展方法 $.fn.serializeObject = function( ...

  7. 无法解决“Newtonsoft.Json, Version=6.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed”与“Newtonsoft.Json, Version=4.5.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed”之间的冲突。正在随意选择“Newtonsoft.Jso

    今天的程序莫名报错:  无法解决“Newtonsoft.Json, Version=6.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed” ...

  8. api接口返回动态的json格式?我太难了,尝试一下 linq to json

    一:背景 1. 讲故事 前段时间和一家公司联调api接口的时候,发现一个奇葩的问题,它的api返回的json会动态改变,简化如下: {"Code":101,"Items& ...

  9. 好奇怪啊,如果邮箱JSON格式的字符串不是在一行上,那么转为JSON将转换不成功,估计是数据格式有问题吧

    好奇怪啊,如果邮箱JSON格式的字符串不是在一行上,那么转为JSON将转换不成功,估计是数据格式有问题吧, 打印出的数据必须是如下的在一行的字符串,才可以转换为JSON格式成功.

随机推荐

  1. 使用SLT工具从SAP导入数据到SAP HANA

    在配置完备的情况下,SLT工具的Replicate 工作是在SAP HANA Data Provisioning中完成的 1. Log on to the SAP HANA Studio 2. Cal ...

  2. SAP HANA创建层次结构的属性视图(Hierarchy Attribute View)

    在产品表中,数据是具有一定层次结构的 1. 在Content相应的package下面右键点击Attribute View,新建Attribute View 填写相关信息,注意:我们所建的依然是标准视图 ...

  3. Ecstore启用www.ecstore.com和m.ecstore.com域名

    Ecstore启用www.ecstore.com和m.ecstore.com域名 修改config/mapper.php if($_SERVER['SERVER_NAME']=='www.ecstor ...

  4. PotPlayer播放器 莫尼卡汉化绿色版 V1.6.48089 32位

    软件名称: PotPlayer播放器 莫尼卡汉化绿色版 软件语言: 简体中文 授权方式: 免费软件 运行环境: Win7 / Vista / Win2003 / WinXP 软件大小: 10.5MB ...

  5. 12C RMAN 备份参考v1

    windows bat 1,C:\dba\utility\rman\rman.bat del C:\dba\utility\rman\full_db_* /qset TNSNAME=ceipuatrm ...

  6. 分布式缓存HttpRuntime.cache应用到单点登陆中_优化登陆

    以前的设计方案,是我们在数据库中放一个表,用作存储验证登陆成功的用户,并且生成用户TOKEN(令牌) 分布式缓存+集群的解决方案图: 相应的代码: DE层中配置文件: receiveTimeout=& ...

  7. 寒假学干货之------ 初学者关于fragment_main(碎片的困扰)

    我们在activity_main中编写的框架,会被fragment_main中的取代掉,是因为新版的ADT为了配合平板Android3.0开发 起作用的代码在MainActivity.java中 pa ...

  8. ERROR Worker: All masters are unresponsive! Giving up

    启动spark的时候发现,主节点(master)上的Master进程还在,子节点(Worker)上的Worker进程自动关闭. 在子节点上查询log发现: ERROR Worker: All mast ...

  9. Selenium 中文API

    Selenium 中文API   转自:http://blog.csdn.net/lh9529/article/details/3946567 概念 Selenium 通过命令进行驱动.Seleniu ...

  10. JSON.parse() JSON.stringify() eval() jQuery.parseJSON() 的区别

    http://www.jb51.net/article/81880.htm    :   jQuery.parseJSON(jsonString) : 将格式完好的JSON字符串转为与之对应的Java ...