Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 更新日期列以匹配上一列,以显示与职务匹配的日期_Sql Server_Tsql - Fatal编程技术网

Sql server 更新日期列以匹配上一列,以显示与职务匹配的日期

Sql server 更新日期列以匹配上一列,以显示与职务匹配的日期,sql-server,tsql,Sql Server,Tsql,我在一家律师事务所工作,有些案件可能需要几年才能完成,因此我希望创建一份报告,在该案件期间,当该人获得晋升时,该报告会改变其职位 使用以下指南 随着时间的推移,我的职称会发生变化,但职称变化的日期并没有正确更新。它正在做的是采取有史以来第一次变更日期,并继续进行,这将是因为我设置了TOP 1。我确定,我现在想知道的是,我如何告诉它在工作名称和收入代码匹配的行中工作。下面是我到目前为止的代码 SELECT A.STAFF_DIWOR, DATEPART(YEAR, A.CHANG

我在一家律师事务所工作,有些案件可能需要几年才能完成,因此我希望创建一份报告,在该案件期间,当该人获得晋升时,该报告会改变其职位

使用以下指南

随着时间的推移,我的职称会发生变化,但职称变化的日期并没有正确更新。它正在做的是采取有史以来第一次变更日期,并继续进行,这将是因为我设置了TOP 1。我确定,我现在想知道的是,我如何告诉它在工作名称和收入代码匹配的行中工作。下面是我到目前为止的代码

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)`