Estou montando uma planilha que traga todas as Seções que aparecem na tabela PFHSTSEC (Histórico de Seção) porém que também traga quais foram as funções (PFHSTFCO que estiveram em cada seção pelo período de data de cada tabela.
 
	Consegui montar um select que traga isto, porém quando tem intersecção como no Exemplo abaixo.
 
	Histórico de Seção
 
	18/07/2005    01.01.08.03.01    LOGISTICA 
	01/06/2006    01.01.08.05.01    EST PROD ACAB. 
	01/05/2007    01.03.01.06.01    CPD 
	09/09/2011    01.03.01.03.01    INFORMÁTICA 
	 
 
	Histórico de Função
 
	18/07/2005    117    AUX DE EXPEDICAO 
	01/10/2005    118    AUX DE ALMOXARIFADO 
	01/05/2007    132    AUX DE SUPORTE  
	01/07/2008    179    ANALISTA DE SUPORTE 
	01/12/2012    202    ANALISTA DE SUPORTE PL 
	01/03/2015    311    ANALISTA INFRAESTRUTURA PL 
	01/01/2017    362    ANALISTA INFRAESTRUTURA SR 
	 
 
	O resultado que necessito é conforme abaixo:
 
				
								SEÇÃO
							
							
								PERÍODO
							
							
								FUNÇÃO
							
						
								Logística
							
							
								18/07/2005 à 31/05/2006
							
							
								117 e 118
							
						
								Estoque
							
							
								01/06/2006 a 30/04/2007
							
							
								118
							
						
								CPD
							
							
								01/05/2007 à 08/09/2011
							
							
								132 e 179
							
						
								Informática
							
							
								09/09/2011 até hoje
							
							
								179, 202, 311, 262
							
						
					 
				 
				
					Com isto montei o script abaixo
				 
				
					SELECT DISTINCT X.* 
					FROM ( 
					SELECT A.CODSECAO 
					     , PSECAO.DESCRICAO 
					     , (SELECT X.CODFUNCAO 
					        FROM PFHSTFCO X LEFT JOIN PFUNCAO X1 ON  
					                      X.CODCOLIGADA=X1.CODCOLIGADA 
					             AND      X.CODFUNCAO=X1.CODIGO 
					        WHERE X.CODCOLIGADA=A.CODCOLIGADA 
					        AND X.CHAPA=A.CHAPA  
					        AND X.DTMUDANCA = (SELECT MAX(X.DTMUDANCA) 
					                           FROM PFHSTFCO X LEFT JOIN PFUNCAO X1 ON  
					                                       X.CODCOLIGADA=X1.CODCOLIGADA 
					                              AND      X.CODFUNCAO=X1.CODIGO 
					                         WHERE X.CODCOLIGADA=A.CODCOLIGADA 
					                         AND X.CHAPA=A.CHAPA  
					                         AND X.DTMUDANCA <= A.DTMUDANCA)  
					       ) CODFUNCAO 
					     , (SELECT X1.NOME 
					        FROM PFHSTFCO X LEFT JOIN PFUNCAO X1 ON  
					                      X.CODCOLIGADA=X1.CODCOLIGADA 
					             AND      X.CODFUNCAO=X1.CODIGO 
					        WHERE X.CODCOLIGADA=A.CODCOLIGADA 
					        AND X.CHAPA=A.CHAPA  
					        AND X.DTMUDANCA = (SELECT MAX(X.DTMUDANCA) 
					                           FROM PFHSTFCO X LEFT JOIN PFUNCAO X1 ON  
					                                       X.CODCOLIGADA=X1.CODCOLIGADA 
					                              AND      X.CODFUNCAO=X1.CODIGO 
					                         WHERE X.CODCOLIGADA=A.CODCOLIGADA 
					                         AND X.CHAPA=A.CHAPA  
					                         AND X.DTMUDANCA<=A.DTMUDANCA)) FUNCAO 
					      
					FROM PFHSTSEC A LEFT JOIN PFUNC B ON  
					              A.CODCOLIGADA = B.CODCOLIGADA 
					     AND      A.CHAPA = B.CHAPA 
					              JOIN PSECAO ON 
					                   A.CODCOLIGADA = PSECAO.CODCOLIGADA 
					              AND  A.CODSECAO = PSECAO.CODIGO 
					WHERE A.CODCOLIGADA = 1 
					    AND A.CHAPA = '3109' 
					) X 
					WHERE CODSECAO IS NOT NULL 
					AND   CODFUNCAO IS NOT NULL 
					ORDER BY 1, 3
				 
				
					 
				 
				
					 
				 
				
					 
				 
				
					Mas o resultado que o meu script retorna é o seguinte:
				 
				
								SEÇÃO
							
							
								PERÍODO
							
							
								FUNÇÃO
							
						
								Logística
							
							
								18/07/2005 A 30/09/2005
							
							
								117
							
						
								Estoque
							
							
								01/10/2005 A 30/04/2007
							
							
								118
							
						
								CPD
							
							
								01/05/2007 A 30/06/2008
							
							
								132
							
						
								Informática
							
							
								01/07/2008 A 30/11/2012
							
							
								179
							
						
					 
				 
				
					Resumindo não esta trazendo todos os códigos de funções que deveriam e no último registro retorna apenas 1 item e não 4 que seria o correto.
				 
				
					 
				 
				
					Poderiam me ajudar?