Sql server 更新日期列以匹配上一列,以显示与职务匹配的日期
我在一家律师事务所工作,有些案件可能需要几年才能完成,因此我希望创建一份报告,在该案件期间,当该人获得晋升时,该报告会改变其职位 使用以下指南 随着时间的推移,我的职称会发生变化,但职称变化的日期并没有正确更新。它正在做的是采取有史以来第一次变更日期,并继续进行,这将是因为我设置了TOP 1。我确定,我现在想知道的是,我如何告诉它在工作名称和收入代码匹配的行中工作。下面是我到目前为止的代码Sql server 更新日期列以匹配上一列,以显示与职务匹配的日期,sql-server,tsql,Sql Server,Tsql,我在一家律师事务所工作,有些案件可能需要几年才能完成,因此我希望创建一份报告,在该案件期间,当该人获得晋升时,该报告会改变其职位 使用以下指南 随着时间的推移,我的职称会发生变化,但职称变化的日期并没有正确更新。它正在做的是采取有史以来第一次变更日期,并继续进行,这将是因为我设置了TOP 1。我确定,我现在想知道的是,我如何告诉它在工作名称和收入代码匹配的行中工作。下面是我到目前为止的代码 SELECT A.STAFF_DIWOR, DATEPART(YEAR, A.CHANG
SELECT
A.STAFF_DIWOR,
DATEPART(YEAR, A.CHANGE_DATE) AS [Year],
DATEPART(MONTH, A.CHANGE_DATE) AS [Month],
A.CHANGE_DATE, A.NEW_TYPE_DIWOR,
B.EARNERCODE, C.CATEGORYDESC
INTO
#TmpStaff
FROM
STAFF_CHANGE_HISTORY A
LEFT JOIN
STAFF B ON A.STAFF_DIWOR = B.DIWOR
LEFT JOIN
EMPLOYEE_CATEGORY C ON C.DIWOR = A.NEW_TYPE_DIWOR
WHERE
CHANGE_TYPE = 'EMP'
AND CATEGORYDESC <> 'Leavers'
SELECT
A.MATTER_CODE, A.FE_CODE, A.FE_NAME,
B.YEARDESC, A.PERIOD, CHRG_HRS_YTD,
(SELECT TOP 1 Ts.CATEGORYDESC FROM #TmpStaff Ts
WHERE Ts.[Year] <= (YEARDESC) AND (FE_CODE = Ts.EARNERCODE)) AS STAFF_GRADE,
(SELECT TOP 1 Ts.CHANGE_DATE FROM #TmpStaff Ts
WHERE Ts.[Year] <= (YEARDESC) AND (FE_CODE = Ts.EARNERCODE)) AS ChangeDate --This is not updating with the correct date
FROM
on_mat_fe_PERF A
JOIN
PM_YEAR B ON A.FINYEARDIWOR = B.DIWOR
WHERE
A.MATTER_CODE = @Matter
这就是我想从中得到的
Solicitor Newly Qualified 2018-05-03 09:15:16.100
Solicitor 1+ 2019-07-27 09:30:16.100
谢谢你,艾弗里·拉里
SELECT max(Ts.CHANGE_DATE) FROM #TmpStaff Ts WHERE Ts.[Year] <= (YEARDESC) AND (FE_CODE = Ts.EARNERCODE)`
这正是所需的样本数据和预期结果将帮助我们在这里帮助您。我打赌您只需要添加order by,就可以使您的前1名不是任意的。可能从TmpStaff Ts WHERE Ts.[Year]中选择TOP 1 Ts.CHANGE_DATE,也可能从TmpStaff Ts WHERE Ts.[Year]中选择maxTs.CHANGE_DATE,如果在使用TOP时不提及order by子句,则最终会出现随机的TOP“n”。正确的方法是使用ORDERBY子句,同时使用TOP“n”。然后执行其他计算/逻辑。
SELECT max(Ts.CHANGE_DATE) FROM #TmpStaff Ts WHERE Ts.[Year] <= (YEARDESC) AND (FE_CODE = Ts.EARNERCODE)`