Pular para o conteúdo
  • Este tópico contém 9 respostas, 4 vozes e foi atualizado pela última vez 17 anos, 1 mês atrás por VINI85.
Visualizando 10 posts - 1 até 10 (de 10 do total)
  • Autor
    Posts
  • #85027
    VINI85
    Participante

      Boa tarde, preciso retornar a penultima linha de uma tabela
      EX: preciso trazer o historico salarial dos funcionarios, preciso do penultimo salario de todos os funcionarios…
      Aguardo.

      #85029
      Marcio68Almeida
      Participante

        não serve o salário do mês anterior ???
        tem que ser a última atualização ???

        #85030
        VINI85
        Participante

          [quote=”Marcio68Almeida”:vc57mnbp]não serve o salário do mês anterior ???
          tem que ser a última atualização ???[/quote]

          então, eu preciso do salario anterior, por exemplo existe um funcionario que teve 5 aumentos eu preciso pegar 4 aumento, porém existem funcionarios que tiveram 2, 3, em fim…o mais correto seria ir até a ultima linha e retornar a penultima…

          #85031
          Marcio68Almeida
          Participante

            bom…

            sub-querye
            Você pode ordenar as atualizações salariais em ordem decrescente, primeiro a última até a primeira…
            Pegar apenas as duas primeiras linhas.

            querye
            Ordenar a sub-querye em ordem crescente e pegar a primeira linha…

            #85032
            VINI85
            Participante

              [quote=”Marcio68Almeida”:29ped4vz]bom…

              sub-querye
              Você pode ordenar as atualizações salariais em ordem decrescente, primeiro a última até a primeira…
              Pegar apenas as duas primeiras linhas.

              querye
              Ordenar a sub-querye em ordem crescente e pegar a primeira linha…[/quote]

              Correto Marcio, mas não sei montar essa query em oracle, eu trabalho com SQL Server, e hoje estou em um cliente que trabalha com oracle, em sql Server eu faço tranquilo…

              #85034
              adanelon
              Participante

                Você não possui um campo marcando a data/hora da última atualização de salário ocorrida para aquele funcionário?

                #85036
                Avatar photoLeonardo Litz
                Participante

                  Tenta assim para ver se funciona

                  select max(f1.dt_aumento)
                  from tb_funcionario f1
                  where f1.dt_autmento < (select max(f2.dt_aumento)
                  from tb_funcionario f2
                  where f2.codigo = f1.codigo)
                  and f1.codigo = 'codigo do seu funcionario'

                  Só depois vc substituir o nome da tabela, das colunas, ou poste ai a estrutura de sua tabela.

                  Vlw Leonardo Litz

                  #85046
                  adanelon
                  Participante

                    Uma forma de fazer seria utilizando uma função analítica, sendo que o comando ficaria mais ou menos assim:

                    SELECT a.funcionario,
                    a.salario
                    FROM (SELECT funcionario,
                    salario,
                    Row_Number() over
                    (
                    PARTITION BY funcionario
                    ORDER BY dt_salario DESC
                    ) AS ID
                    FROM tabela
                    ) a
                    WHERE a.id = 2

                    A função utilizada no FROM ordena a data do salário em ordem decrescente por funcionário. Então, o identificador 2 seria a penúltima data. Se fosse a antepenúltima, seria o identificador 3, e assim por diante.

                    []s

                    #85051
                    VINI85
                    Participante

                      valeu galera.

                      #85087
                      VINI85
                      Participante

                        [quote=”adanelon”:3flj62i6]Uma forma de fazer seria utilizando uma função analítica, sendo que o comando ficaria mais ou menos assim:

                        SELECT a.funcionario,
                        a.salario
                        FROM (SELECT funcionario,
                        salario,
                        Row_Number() over
                        (
                        PARTITION BY funcionario
                        ORDER BY dt_salario DESC
                        ) AS ID
                        FROM tabela
                        ) a

                        WHERE a.id = 2

                        A função utilizada no FROM ordena a data do salário em ordem decrescente por funcionário. Então, o identificador 2 seria a penúltima data. Se fosse a antepenúltima, seria o identificador 3, e assim por diante.

                        []s[/quote]

                        valeu cara deu certinho, mais uma dúvida….eu preciso agora saber o percentual de almento que o funcionario teve do penultimo para o ultimo salario, será que vc pode me ajudar nesse enigma?

                        abraços;

                      Visualizando 10 posts - 1 até 10 (de 10 do total)
                      • Você deve fazer login para responder a este tópico.