业务描述:
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]排序,就可以获取到
原文:https://www.cnblogs.com/Joanna-net/p/15035432.html