这个问题已经在这里有一个答案:
我有以下查询返回用户的ID,名称,开始/离开的日期和时间,他们离开他们在公司内部以往的角色。我只当他们离开了前次的角色感兴趣。表EMPOS在当每个用户留下每一个角色,所以如果一个人一直在3个角色,他们会出现在表中的数据。但是3次我都只是在最大离开日期感兴趣
任何帮助,将不胜感激
select cast(a.DET_NUMBER as varchar) as 'Frontier ID', CONCAT (a.DET_G1_NAME1,' ',a.DET_SURNAME) as 'Name',
CASE WHEN b.TER_DATE <GETDATE() THEN '_'+CONCAT (a.DET_G1_NAME1,' ',a.DET_SURNAME) ELSE CONCAT (a.DET_G1_NAME1,' ',a.DET_SURNAME) END AS 'Name2',
cast(a.DET_DATE_JND as date) as 'Start Date', cast(b.TER_DATE as date) as 'Leaving Date',
case when c.POS_END = '0001-01-02' then null else c.POS_END end as 'Date User Left Prev Role'
from EMDET a
left outer join EMTER b on a.DET_NUMBER = b.DET_NUMBER
left outer join EMPOS c on a.DET_NUMBER = c.DET_NUMBER
left outer join EMDET d on c.POS_MANEMPNO = d.DET_NUMBER
where b.TER_DATE is null and c.POS_END >'1900-01-01'
order by [Leaving Date]
您可以嵌套现有查询到子查询和组行,然后得到DateUserLeftPrevRole
的MAX:
select
q.FrontierID
, q.Name
, q.Name2
, q.StartDate
, q.Leaving Date
, MAX(q.DateUserLeftPrevRole)
from
(
select
cast(a.DET_NUMBER as varchar) as FrontierID
, CONCAT (a.DET_G1_NAME1,' ',a.DET_SURNAME) as Name
,CASE WHEN b.TER_DATE <GETDATE() THEN '_'+CONCAT (a.DET_G1_NAME1,' ',a.DET_SURNAME)
ELSE CONCAT (a.DET_G1_NAME1,' ',a.DET_SURNAME) END AS 'Name2'
,cast(a.DET_DATE_JND as date) as 'StartDate'
, cast(b.TER_DATE as date) as 'LeavingDate'
, case when c.POS_END = '0001-01-02' then null else c.POS_END end as 'DateUserLeftPrevRole'
from EMDET a
left outer join EMTER b on a.DET_NUMBER = b.DET_NUMBER
left outer join EMPOS c on a.DET_NUMBER = c.DET_NUMBER
left outer join EMDET d on c.POS_MANEMPNO = d.DET_NUMBER
where b.TER_DATE is null and c.POS_END >'1900-01-01'
)q
GROUP BY q.FrontierID, q.Name, q.Name2, q.StartDate, q.Leaving Date
让我给的GROUPING
和使用MAX
功能的基本思路:
DECLARE @TestTable TABLE
(
Col1 VARCHAR(10),
Col2 INT,
Col3 INT
)
INSERT INTO @TestTable
(
Col1,
Col2,
Col3
)
VALUES
('A', 10, 20)
,('A', 11, 30)
,('A', 12, 40)
,('A', 12, 60)
SELECT
tt.Col1
, tt.Col2
, MAX(tt.Col3) MaxCol3
FROM @TestTable tt
GROUP BY tt.Col1, tt.Col2
OUTPUT:
Col1 Col2 MaxCol3
A 10 20
A 11 30
A 12 60