开窗函数主要分为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. NVIC

    1中断:每一个中断都会对应一个服务程序 2NVIC 他的做用是负责中断优先级管理 3IP bit[7:4]每一个中断都有一个IP寄存器,用于设置中断相关的属性 AIRCR[10:8]只一个AIRCR寄 ...

  2. C# 语言规范_版本5.0 (第11章 结构)

    1. 结构 结构与类的相似之处在于,它们都表示可以包含数据成员和函数成员的数据结构.但是,与类不同,结构是一种值类型,并且不需要堆分配.结构类型的变量直接包含了该结构的数据,而类类型的变量所包含的只是 ...

  3. ios 显示其他app的购买页面

    using UnityEngine; using System.Collections; using System.Runtime.InteropServices ; public class IOS ...

  4. spark MLLib的基础统计部分学习

    参考学习链接:http://www.itnose.net/detail/6269425.html 机器学习相关算法,建议初学者去看看斯坦福的机器学习课程视频:http://open.163.com/s ...

  5. VS发布网站步骤(先在vs上发布网站到新的文件夹,然后挂到iis上面)

    VS发布网站步骤(先在vs上发布网站到新的文件夹,然后挂到iis上面) 首先用vs2010打开一个Asp.Net项目,   也可以通过vs菜单->生成->发布网站   选择发布网站的路径 ...

  6. Codeforces Round #346 (Div. 2) C Tanya and Toys

    C. Tanya and Toys 题目链接http://codeforces.com/contest/659/problem/C Description In Berland recently a ...

  7. lucene 自定义评分

    摘自:http://blog.csdn.net/seven_zhao/article/details/42708953 1.基于FunctionQuery,(1)创建类并继承ValueSource:( ...

  8. mysql中的unix_timestamp函数

    偶然看到MySQL的一个函数 unix_timestamp(),不明就里,于是就试验了一番. unix_timestamp()函数的作用是返回一个确切的时间点的UNIX时间戳,这个Unix时间戳是一个 ...

  9. 自动安装Redis服务端与PHP扩展Redis

    该脚本基于阿里云服务器安装脚本,并只能运用于centos / aliyun os,该脚本使用时,需要与阿里云安装脚本的install.sh放在同一目录下.有缘人切忌乱用: #! /bin/bash # ...

  10. 分布式版本控制系统Git-----2.上传至远程仓库之基础版

    好,之前已经将文档下载下来了,但是我感觉还是将自己之前截的图放出来比较好,自己整理的,但是总不能放桌面上,时间久了也会忘得,索性放到博客上吧,也便于其他人查看,简直是百利而无一害啊.哈哈.来吧. 注意 ...