我有一个带有CreatedDate
的transact表(历史表),此事务与employee表相关。(内部加入transact_id)
尽管如此,问题还是出现了:我需要查询这些表并按月获取状态,因为在这一年中,CreatedDate
可以更改。例如,7月的员工更新将创建一个新的行,但这不应影响三月份的总数。
这个解决方案看起来像一个forech,但是我如何在最后加入所有行呢?其结果应该是:
我得到了每个员工的最后一个状态:
select AllTransact.id_employee, AllTransact.id_department from (
select id_employee, id_department, rank() over (partition by id_employee order by created_date desc) desc_rank
from Transact_Employee TransEmployee
inner join Transact on TransEmployee.ID_Transact = Transact.ID_Transact
and Transact.Status = 8
and Transact.Created_Date < @currentMonth) AllTransact
where desc_rank = 1
*我不想重复和超过所有的代码12次。:)
发布于 2013-04-08 21:22:16
您可以对许多列进行分区。rank() OVER (partition BY [id_employee],datepart(month,[Created_Date]) ORDER BY [Created_Date] DESC)
会给出您现在拥有的内容,但是每个月都会这样(而且它不关心那个月是哪一年,所以您也需要按年进行分区,或者在created_date上添加限制)。
https://stackoverflow.com/questions/15888342
复制相似问题