SQL PARTITION BY用法

业务描述:

1、如下图所示,有一张表,该表存储某一公司某一部门下当前的预算详情。

预算可以进行多次修订,并且每一次修订的版本需要保留,所以每次修改预算都会新增一条数据到该预算信息表,同时CreateTime是操作数据库当时的时间。

 

2、某一部门下的预算可以通过科目Code进行详细拆分、所以针对该预算主表设计一个预算明细表,两者通过主表的ID和存表的FID进行关联。

表存储数据如下:

 

3、需求:报表需要显示公司下所有部门的最新预算信息       数据库数据分析:同一个部门如果多次修订预算,则会存在多条数据,通过CreateTime区分哪条数据是最新的数据。

4、SQL 语句

select * from (

  select *,ROW_NUMBER() over(partition by [CompanyId] ,[DeptId],[AccountCode] order by [CreateTime] desc) ranks 
  from [P_Budget_BasicInfo] as b
       left join P_Budget_DetailInfo as d on b.ID=d.FID
  ) a
where a.ranks=1                    

5、解析:partition by :分区;按[CompanyId] ,[DeptId],[AccountCode]分区,依据[CreateTime]排序,就可以获取到

posted @ 2021-07-21 21:05  美女程序员-Joanna  阅读(1980)  评论(0)    收藏  举报