SQL PARTITION BY用法
阿新 • • 發佈:2021-07-21
業務描述:
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] 排序,就可以獲取到