查询以包含第一条记录和最后一条记录以仅显示一个输出

时间:2021-03-25 02:37:05

标签: sql sql-server tsql

如何检索 Validfrom 为 MIN 和 Validto 为 MAX,只显示最后一条最大记录?

select *
from Employee
where the Staff ID = A123456

当前结果

Staff ID, Staff Full Name, Staff English Name, Position, Division, Department, Section, VALIDFROM, VALIDTO    
A123456,Chan Tai Man,Peter Chan,CLERK,MARKETING,SUPPORT SERVICES,NONE,**2000-01-01 00:00:00.000**,2014-12-31 23:59:59.000    
A123456,Chan Tai Man,Peter Chan,SUPERVISOR,MARKETING,SUPPORT SERVICES,NONE,2005-01-01 00:00:00.000,2010-12-31 23:59:59.000    
**A123456,Chan Tai Man,Peter Chan,MANAGER,MARKETING,SUPPORT SERVICES,NONE**,2011-01-01 00:00:00.000,**2016-12-31 23:59:59.000**

上述 BOLD 的预期结果

Staff ID,Staff Full Name,Staff English Name,Position,Division,Department,Section,VALIDFROM,VALIDTO    
A123456,Chan Tai Man,Peter Chan,MANAGER,MARKETING,SUPPORT SERVICES,NONE,2000-01-01 00:00:00.000,2016-12-31 23:59:59.000

1 个答案:

答案 0 :(得分:0)

似乎您想要 MIN()VALIDFROM,但其余列来自 VALIDTO 是最新的行

FIRST_VALUE(VALIDFROM) 为您提供 VALIDFROM

的第一个值/分钟

ROW_NUMBER()... 为您提供最新的 VALIDTO

SELECT *
FROM   (
           SELECT *,
                  MIN_VALIDFROM = FIRST_VALUE(VALIDFROM) OVER (PARTITION BY [STAFF ID]
                                                                   ORDER BY VALIDFROM),
                  RN = ROW_NUMBER() OVER (PARTITION BY [STAFF ID] 
                                              ORDER BY VALIDTO DESC)
           FROM   Employee
       ) e
WHERE  e.RN = 1
AND    e.[Staff ID] = 'A123456'
相关问题