比较两个值以返回最大值,并使用该值填充另一个表

时间:2016-12-22 11:58:03

标签: sql-server tsql

我正在尝试填充包含字段的表格:

EmpPositioniTrent
EffectiveDate
ManPositioniTrent

两个位置编号来自一个表格,EffectiveDate填充了与位置编号关联的最新/最新StartDate,位于另一个表格中。

从此表中:我检索两个位置编号

enter image description here

然后使用下表,我加入Person编号,我想(使用上表中的PersonNumber和ManPerNo字段)哪些具有较晚的开始日期,并使用它来填充EffectiveDate字段在我的新表中。

enter image description here

我到目前为止:

SELECT 
a.EmpPositioniTrent, 
a.ManPositioniTrent, 
MAX(b.StartDate) AS EffectiveDate
FROM [dbo].[STG_People_Manager] a
JOIN [dbo].[STG_0001_ORGANISATION_ASSIGNMENT] b 
ON a.PersonNumber = b.PersonNumber
WHERE b.EndDate >= GETDATE()

我想知道我是否需要使用CTE(SELECT) AS来实现此目标,但我完全被卡住了!我曾尝试使用MAX日期,但无法正确或有效地使用它,因为我找不到比较它们的方法。

非常感谢任何帮助。我也意识到我没有解释得这么好,但我已经尽力了!

2 个答案:

答案 0 :(得分:0)

如果这是SQL Server,我不记得有SELECT AS

INSERT INTO <<table>> (PositionNumber, ManagerPositionNumber, EffectiveDate)
SELECT 
a.EmpPositioniTrent 
a.ManPositioniTrent 
MAX(b.StartDate)
FROM [dbo].[STG_People_Manager] a
JOIN [dbo].[STG_0001_ORGANISATION_ASSIGNMENT] b 
ON a.PersonNumber = b.PersonNumber
WHERE b.EndDate >= GETDATE()
GROUP BY a.EmpPositioniTrent, b.ManPositioniTrent

答案 1 :(得分:0)

所以,如果它对其他人有帮助,我会在这里发布我是如何做到的,并希望能比我解释这个问题更好地解释它。

我有一张表(A),其中包括列:

EmpPositionNumber | ManagerPositionNumber 

在另一张表(B)中列出了所有

 PositionNumbers | StartDates

(管理者和emp之间没有区别)

使用列填充第三个表(C):

EmpPositionNumber | EffectiveDate | ManPositionNumber

我需要比较表B中的 StartDates ,以获得表A每行的两个位置编号,以便能够使用最新的表格填充表C中的 EffectiveDate 日期。

为实现这一目标,最后,我填写了第四张表D:

EmpPositionNumber | ManPositionNumber | StartDate

并且表A中的每一行都填充了两行,表B中的 StartDate 对于这两行是不同的,例如:

EmpPositionNumber | ManPositionNumber | StartDate
    A             |       Aa          | 12/1/2016
    A             |       Aa          | 15/3/2015
    B             |       Xa          | 4/1/2013
    B             |       Xa          | 18/5/2016

然后填充表C,我选择了 EmpPositionNumber ManPositionNumber ,以及 MAX(StartDate)GROUP BY EmpPositionNumber,ManPositionNumber

我希望这有道理并得到妥善解释。