Ir para conteúdo
Seja Membro VIP - Remova Banners de Propagandas, Tenha Liberado Qualquer Download, Além de Acessos em Áreas Exclusivas!! ×
Quer acesso a todas as Áreas do Fórum, até aquelas só para membros VIPs? Também quer poder baixar qualquer ARQUIVO? ×

Lista de funcionário de anos diferentes


Ir para a solução Resolvido por luisgustavogomes,

Posts Recomendados


  • Tópicos Que Criei:  21
  • Tópicos/Dia:  0.01
  • Meu Conteúdo:  44
  • Conteúdo/Dia:  0.01
  • Reputação:   2
  • Pontos/Conquistas:  435
  • Conteúdo Resolvido:  0
  • Dias Ganho:  2
  • Status:  Offline
  • Idade:  34
  • Dispositivo:  Windows

Olá pessoal, boa tarde.

Preciso de criar uma lista de funcionário com os seguintes campo:

Nome do colaborador, Cargo, Data de admissão, Grau de Instrução/formação e Anotações.

A busca desses campo estão ok. Porém eu estou com um dificuldade em duas questão na SQL.

1- Como ir buscar funcionário em outro anos. Tipo em 2023,2022,2021,2020,..

2-E no caso do cargo. Porque pode ter acontecido mudança entre os anos.

 

Desde já agradeço a ajuda.

Link para comentar
Compartilhar em outros sites

  • Solução

  • Tópicos Que Criei:  5
  • Tópicos/Dia:  0.00
  • Meu Conteúdo:  485
  • Conteúdo/Dia:  0.21
  • Reputação:   136
  • Pontos/Conquistas:  3.231
  • Conteúdo Resolvido:  0
  • Dias Ganho:  64
  • Status:  Offline
  • Idade:  35
  • Dispositivo:  Windows

@jasson nascimento, bom dia! 

 

Segue uma possibilidade em SQLServer... 

 

SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;
SET NOCOUNT ON;

DECLARE @CODCOLIGADA INT = 1;
DECLARE @DATAINICIAL DATETIME = '2008-01-01' 
DECLARE @DATAFINAL   DATETIME = '2023-12-31' 

DECLARE @DATAFINALAJS  DATETIME = DATEADD(DAY,1, @DATAFINAL)

;WITH TAB_DATAS
AS
(
	SELECT @DATAINICIAL AS 'DT'
	
	UNION ALL 

	SELECT DATEADD(DAY,1,DT)
	FROM TAB_DATAS
	WHERE DT < @DATAFINAL

)
, TAB_ANO
AS
(
	SELECT  DATETIMEFROMPARTS(ANO,12,31,23,59,59,997) AS 'DT', ANO
	FROM 
	(
		SELECT DISTINCT YEAR(DT) AS 'ANO' 
		FROM TAB_DATAS
	) T
) 
SELECT 
	 T.ANO
	,T.DT
	,P.CODCOLIGADA
	,P.CHAPA
	,P.DATAMUDANCA
	,P.NOVASITUACAO
	,F.CODFUNCAO_HIST
	,F.NOME_FUNCAO_HIST
FROM TAB_ANO T
CROSS APPLY 
(
	SELECT 
		 P2.CODCOLIGADA 
		,P2.CHAPA 
		,P2.DATAMUDANCA
		,P2.NOVASITUACAO
	FROM
	(
		SELECT 
			 P1.CODCOLIGADA 
			,P1.CHAPA 
			,P1.DATAMUDANCA
			,P1.NOVASITUACAO
			,ROW_NUMBER() OVER (PARTITION BY P1.CODCOLIGADA, P1.CHAPA ORDER BY P1.CODCOLIGADA, P1.CHAPA, P1.DATAMUDANCA DESC ) AS 'SEQ'
		FROM DBO.PFHSTSIT P1
		WHERE P1.CODCOLIGADA = @CODCOLIGADA 
		AND P1.DATAMUDANCA <= T.DT
	) P2
	WHERE P2.SEQ = 1 
) P 
OUTER APPLY 
(
  SELECT 
		 H.CODCOLIGADA
		,H.CODFUNCAO AS 'CODFUNCAO_HIST'
		,F.NOME AS 'NOME_FUNCAO_HIST'
      FROM DBO.PFHSTFCO H
	  JOIN DBO.PFUNCAO  F ON (H.CODCOLIGADA = F.CODCOLIGADA AND H.CODFUNCAO = F.CODIGO)
     WHERE H.CODCOLIGADA = p.CODCOLIGADA
	   AND H.CHAPA= P.CHAPA
       AND H.DTMUDANCA = (SELECT MAX(HH.DTMUDANCA)
                            FROM DBO.PFHSTFCO HH 
                           WHERE HH.CODCOLIGADA = H.CODCOLIGADA 
						     AND HH.CHAPA = H.CHAPA
                             AND HH.DTMUDANCA <= T.DT)

) F 
WHERE P.NOVASITUACAO NOT IN ('D')
ORDER BY T.ANO, P.CHAPA 
OPTION (MAXDOP 1, MAXRECURSION 0)

 

 

Essa query tem a abordagem de verificar o histórico de situação do funcionário! Logo, pode ter supressas... como eu tive de históricos incorretos...

 

/*

p/s

Vou deixar aqui um outra formar de buscar os registros por grupo, para histórico.

SELECT TOP 1 WITH TIES 
     CODCOLIGADA 
    ,CHAPA 
    ,DATAMUDANCA
    ,NOVASITUACAO
FROM DBO.PFHSTSIT 
WHERE CODCOLIGADA = 1
ORDER BY ROW_NUMBER() OVER (PARTITION BY CODCOLIGADA, CHAPA ORDER BY CODCOLIGADA, CHAPA, DATAMUDANCA DESC )

*/

 

Espero lhe ajudar.

Abraços 

 

 

 

  • Gostei 1
Link para comentar
Compartilhar em outros sites


  • Tópicos Que Criei:  21
  • Tópicos/Dia:  0.01
  • Meu Conteúdo:  44
  • Conteúdo/Dia:  0.01
  • Reputação:   2
  • Pontos/Conquistas:  435
  • Conteúdo Resolvido:  0
  • Dias Ganho:  2
  • Status:  Offline
  • Idade:  34
  • Dispositivo:  Windows

@luisgustavogomes Bom dia.

Assim que eu chegar na empresa eu vou da uma testada. Mas desde já agradeço a ajuda.

Att;

Link para comentar
Compartilhar em outros sites


  • Tópicos Que Criei:  47
  • Tópicos/Dia:  0.01
  • Meu Conteúdo:  349
  • Conteúdo/Dia:  0.06
  • Reputação:   7
  • Pontos/Conquistas:  2.126
  • Conteúdo Resolvido:  0
  • Dias Ganho:  4
  • Status:  Offline
  • Idade:  18

Seu tópico foi movido para outra área no ForumRM

Mudamos o mesmo de: Sistemas RM > [RM] Dúvidas e Suporte

Para o fórum: Sistemas RM > [RM] Scripts SQL e Bancos de Dados

Link para comentar
Compartilhar em outros sites


  • Tópicos Que Criei:  5
  • Tópicos/Dia:  0.00
  • Meu Conteúdo:  485
  • Conteúdo/Dia:  0.21
  • Reputação:   136
  • Pontos/Conquistas:  3.231
  • Conteúdo Resolvido:  0
  • Dias Ganho:  64
  • Status:  Offline
  • Idade:  35
  • Dispositivo:  Windows

Bom dia 

Vou incluir uma variação que resulta mês a mês.

 

SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;
SET NOCOUNT ON;

DECLARE @CODCOLIGADA INT = 1;
DECLARE @DATAINICIAL DATETIME = '2023-01-01' 
DECLARE @DATAFINAL   DATETIME = '2023-12-31' 

DECLARE @DATAFINALAJS  DATETIME = DATEADD(DAY,1, @DATAFINAL)

;WITH TAB_DATAS
AS
(
    SELECT @DATAINICIAL AS 'DT'
    
    UNION ALL 

    SELECT DATEADD(DAY,1,DT)
    FROM TAB_DATAS
    WHERE DT < @DATAFINAL

)
, TAB_ANO
AS
(
    SELECT DATETIMEFROMPARTS(YEAR(T.DT), MONTH(T.DT), DAY(T.DT),23,59,59,997) AS 'DT',YEAR(T.DT) AS 'ANO' , MONTH(T.DT) AS 'MES'
    FROM 
    (
        SELECT DISTINCT EOMONTH(DATEFROMPARTS(YEAR(DT), MONTH(DT),1),0) AS 'DT'
        FROM TAB_DATAS
    ) T
)
SELECT 
     T.ANO
    ,T.DT
    ,P.CODCOLIGADA
    ,P.CHAPA
    ,P.DATAMUDANCA
    ,P.NOVASITUACAO
    ,F.CODFUNCAO_HIST
    ,F.NOME_FUNCAO_HIST
FROM TAB_ANO T
CROSS APPLY 
(
    SELECT 
         P2.CODCOLIGADA 
        ,P2.CHAPA 
        ,P2.DATAMUDANCA
        ,P2.NOVASITUACAO
    FROM
    (
        SELECT 
             P1.CODCOLIGADA 
            ,P1.CHAPA 
            ,P1.DATAMUDANCA
            ,P1.NOVASITUACAO
            ,ROW_NUMBER() OVER (PARTITION BY P1.CODCOLIGADA, P1.CHAPA ORDER BY P1.CODCOLIGADA, P1.CHAPA, P1.DATAMUDANCA DESC ) AS 'SEQ'
        FROM DBO.PFHSTSIT P1
        WHERE P1.CODCOLIGADA = @CODCOLIGADA 
        AND P1.DATAMUDANCA <= T.DT
    ) P2
    WHERE P2.SEQ = 1 
) P 
OUTER APPLY 
(
  SELECT 
         H.CODCOLIGADA
        ,H.CODFUNCAO AS 'CODFUNCAO_HIST'
        ,F.NOME AS 'NOME_FUNCAO_HIST'
      FROM DBO.PFHSTFCO H
      JOIN DBO.PFUNCAO  F ON (H.CODCOLIGADA = F.CODCOLIGADA AND H.CODFUNCAO = F.CODIGO)
     WHERE H.CODCOLIGADA = p.CODCOLIGADA
       AND H.CHAPA= P.CHAPA
       AND H.DTMUDANCA = (SELECT MAX(HH.DTMUDANCA)
                            FROM DBO.PFHSTFCO HH 
                           WHERE HH.CODCOLIGADA = H.CODCOLIGADA 
                             AND HH.CHAPA = H.CHAPA
                             AND HH.DTMUDANCA <= T.DT)

) F 
WHERE P.NOVASITUACAO NOT IN ('D')
ORDER BY T.ANO, P.CHAPA 
OPTION (MAXDOP 1, MAXRECURSION 0)

 

Link para comentar
Compartilhar em outros sites


  • Tópicos Que Criei:  21
  • Tópicos/Dia:  0.01
  • Meu Conteúdo:  44
  • Conteúdo/Dia:  0.01
  • Reputação:   2
  • Pontos/Conquistas:  435
  • Conteúdo Resolvido:  0
  • Dias Ganho:  2
  • Status:  Offline
  • Idade:  34
  • Dispositivo:  Windows

@luisgustavogomes

Muito obrigado pela ajuda..

Já testei e funcionou. Valeu.

 

Editado por jasson nascimento
  • Gostei 1
Link para comentar
Compartilhar em outros sites

Participe da conversa

Você pode postar agora, e se registrar mais tarde. Se você tiver uma conta, faça o login agora para postar com sua conta.

Visitante
Responder esse tópico

×   Você colou conteúdo com formatação.   Remover formatação

  Only 75 emoji are allowed.

×   Seu link foi automaticamente inserido no corpo do post.   Exibir como um link

×   Seu conteúdo anterior foi restaurado.   Limpar conteúdo do editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Criar Novo...

Informação Importante

Usando este site, você concorda com nossos Termos de Uso e nossa Política de Privacidade.