1. 程式人生 > 其它 >SQL PARTITION BY用法

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]

排序,就可以獲取到