1、PARTITION BY
开窗函数,
使用场景,在合同表里,获取所有房源在最新的合同编号。或者获取每个班级每次考试的第一名。
区别聚合函数:对于每个每个分组返回多行,而聚合函数对于每个分组只返回一行,
SQL代码:
1 SELECT ROW_NUMBER() OVER ( PARTITION BY ext.RoomNO, ext.OrderNO ORDER BY rp.FDate1 DESC ) rn , 2 rp.FContractNo , 3 rmi.IRoomNO, 4 rp.FDate1 5 FROM t_RPContract rp 6 JOIN T_ContractExtend ext ON ext.FContractID = rp.FContractID 7 JOIN dbo.FY_RoomItems rmi ON rmi.RoomNO = ext.RoomNO 8 AND rmi.OrderNO = ext.OrderNO;
按照房源编号分组,给每一组进行按时间排序
结果如下
如上图所示,房源ZZ00000001Z,按照时间倒序排列,并给每一类加一个序号,所以所有序号为1 的数据都是最新的一条数据。
2、over partition by与group by的区别:
group by是对检索结果的保留行进行单纯分组,一般和聚合函数一起使用例如max、min、sum、avg、count等一块用。
partition by虽然也具有分组功能,但同时也具有其他的高级功能。