- Este tópico contém 9 respostas, 4 vozes e foi atualizado pela última vez 17 anos, 1 mês atrás por
VINI85.
-
AutorPosts
-
2 de fevereiro de 2009 às 10:18 pm #85027
VINI85
ParticipanteBoa 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.2 de fevereiro de 2009 às 10:25 pm #85029Marcio68Almeida
Participantenão serve o salário do mês anterior ???
tem que ser a última atualização ???2 de fevereiro de 2009 às 10:30 pm #85030VINI85
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…
2 de fevereiro de 2009 às 10:48 pm #85031Marcio68Almeida
Participantebom…
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…2 de fevereiro de 2009 às 11:14 pm #85032VINI85
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…
2 de fevereiro de 2009 às 11:44 pm #85034adanelon
ParticipanteVocê não possui um campo marcando a data/hora da última atualização de salário ocorrida para aquele funcionário?
3 de fevereiro de 2009 às 12:58 am #85036Leonardo Litz
ParticipanteTenta 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
3 de fevereiro de 2009 às 6:28 pm #85046adanelon
ParticipanteUma 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 = 2A 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
3 de fevereiro de 2009 às 8:38 pm #85051VINI85
Participantevaleu galera.
5 de fevereiro de 2009 às 12:49 am #85087VINI85
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
) aWHERE 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;
-
AutorPosts
- Você deve fazer login para responder a este tópico.