none
Retornar a data mais recente entre um intervalo de datas no sql. RRS feed

  • Pergunta

  • Olá,

    Estou tentando fazer via sql uma consulta onde eu tenho os seguintes campos DtServico,Nome,Prefixo,Codigo,Status_Equipamento,Equipamento_Critico,Equipamento_Padrao,Valor,Situacao e executo a seguinte query:

     

    SELECT s.DtServico,e.Nome,e.Prefixo,e.Codigo,e.Status_Equipamento,e.Equipamento_Critico,
    e.Equipamento_Padrao,e.Valor,st.Situacao
    FROM Equipamentos AS e LEFT JOIN Servicos AS s ON e.Id = s.Id_Equipamento
                           LEFT JOIN Situacao AS st ON s.Id_Situacao = st.Id
    WHERE e.Nome = 'Acelerador'
    GROUP BY s.DtServico,e.Nome,e.Prefixo,e.Codigo,e.Status_Equipamento,e.Equipamento_Critico,
    e.Equipamento_Padrao,e.Valor,st.Situacao
    ORDER BY e.Codigo ASC
    

    Nela eu tenho um retorno de várias linhas com várias datas porém para cada código que eu tenho de um Acelerador só realmente me interessa ter as informações da data mais recente.Alguém poderia me ajudar com alguma possível forma de fazer isso?

    Obrigado.

    segunda-feira, 6 de fevereiro de 2012 10:22

Respostas

  • Olá Vinicius, Deixa ver se eu entendi, para os registros que possuem data você quer o mais atual e para os que não tem você quer trazer todos certo? Se for isso, da forma abaixo acredito que irá atender. SELECT s.DtServico,e.Nome,e.Prefixo,e.Codigo,e.Status_Equipamento,e.Equipamento_Critico, e.Equipamento_Padrao,e.Valor,st.Situacao FROM Equipamentos AS e LEFT JOIN Servicos AS s ON e.Id = s.Id_Equipamento LEFT JOIN Situacao AS st ON s.Id_Situacao = st.Id WHERE e.Nome = 'Acelerador' and s.DtServico = (SELECT MAX(DtServico) FROM Servicos WHERE Id_Equipamento = s.Id_Equipamento) GROUP BY s.DtServico,e.Nome,e.Prefixo,e.Codigo,e.Status_Equipamento,e.Equipamento_Critico, e.Equipamento_Padrao,e.Valor,st.Situacao UNION SELECT s.DtServico,e.Nome,e.Prefixo,e.Codigo,e.Status_Equipamento,e.Equipamento_Critico, e.Equipamento_Padrao,e.Valor,st.Situacao FROM Equipamentos AS e LEFT JOIN Servicos AS s ON e.Id = s.Id_Equipamento LEFT JOIN Situacao AS st ON s.Id_Situacao = st.Id WHERE e.Nome = 'Acelerador' and s.DtServico IS NULL GROUP BY s.DtServico,e.Nome,e.Prefixo,e.Codigo,e.Status_Equipamento,e.Equipamento_Critico, e.Equipamento_Padrao,e.Valor,st.Situacao ORDER BY 4 ASC

    David Silva | MCITP| MCTS | MCP | ITILF | Blog: http://tilive.wordpress.com

    • Editado David Silva segunda-feira, 6 de fevereiro de 2012 23:45
    • Marcado como Resposta Vinicius_11 terça-feira, 7 de fevereiro de 2012 09:53
    segunda-feira, 6 de fevereiro de 2012 23:43

Todas as Respostas

  • Bom dia Vinícius,

    Veja se com a alteração abaixo atende.

    SELECT s.DtServico,e.Nome,e.Prefixo,e.Codigo,e.Status_Equipamento,e.Equipamento_Critico,
    e.Equipamento_Padrao,e.Valor,st.Situacao
    FROM Equipamentos AS e LEFT JOIN Servicos AS s ON e.Id = s.Id_Equipamento
                                             LEFT JOIN Situacao AS st ON s.Id_Situacao = st.Id
    WHERE e.Nome = 'Acelerador'
    and s.DtServico = (SELECT MAX(DtServico) FROM Servicos WHERE Id_Equipamento = s.Id_Equipamento)
    GROUP BY s.DtServico,e.Nome,e.Prefixo,e.Codigo,e.Status_Equipamento,e.Equipamento_Critico,
    e.Equipamento_Padrao,e.Valor,st.Situacao
    ORDER BY e.Codigo ASC
    

    Espero que ajude.


    David Silva | MCITP| MCTS | MCP | ITILF | Blog: http://tilive.wordpress.com
    segunda-feira, 6 de fevereiro de 2012 10:57
  • Boa tarde David,

     

    Me ajudou muito, porém gostaria de saber como eu fasso quando, por exemplo, eu tenho cadastrado uns 6 aceleradores onde eu tenho a data do serviço em apenas dois mais eu preciso motrar os 6 mesmo com valor NULL como proceder?

     

    Att

    segunda-feira, 6 de fevereiro de 2012 16:53
  • Olá Vinicius, Deixa ver se eu entendi, para os registros que possuem data você quer o mais atual e para os que não tem você quer trazer todos certo? Se for isso, da forma abaixo acredito que irá atender. SELECT s.DtServico,e.Nome,e.Prefixo,e.Codigo,e.Status_Equipamento,e.Equipamento_Critico, e.Equipamento_Padrao,e.Valor,st.Situacao FROM Equipamentos AS e LEFT JOIN Servicos AS s ON e.Id = s.Id_Equipamento LEFT JOIN Situacao AS st ON s.Id_Situacao = st.Id WHERE e.Nome = 'Acelerador' and s.DtServico = (SELECT MAX(DtServico) FROM Servicos WHERE Id_Equipamento = s.Id_Equipamento) GROUP BY s.DtServico,e.Nome,e.Prefixo,e.Codigo,e.Status_Equipamento,e.Equipamento_Critico, e.Equipamento_Padrao,e.Valor,st.Situacao UNION SELECT s.DtServico,e.Nome,e.Prefixo,e.Codigo,e.Status_Equipamento,e.Equipamento_Critico, e.Equipamento_Padrao,e.Valor,st.Situacao FROM Equipamentos AS e LEFT JOIN Servicos AS s ON e.Id = s.Id_Equipamento LEFT JOIN Situacao AS st ON s.Id_Situacao = st.Id WHERE e.Nome = 'Acelerador' and s.DtServico IS NULL GROUP BY s.DtServico,e.Nome,e.Prefixo,e.Codigo,e.Status_Equipamento,e.Equipamento_Critico, e.Equipamento_Padrao,e.Valor,st.Situacao ORDER BY 4 ASC

    David Silva | MCITP| MCTS | MCP | ITILF | Blog: http://tilive.wordpress.com

    • Editado David Silva segunda-feira, 6 de fevereiro de 2012 23:45
    • Marcado como Resposta Vinicius_11 terça-feira, 7 de fevereiro de 2012 09:53
    segunda-feira, 6 de fevereiro de 2012 23:43
  • Bom dia David,

    Mais uma vez obrigado,era isto mesmo que eu queria ele listou 6 aceleradores mesmo com a data nula mais o que realmente me interessa nesta consulta é a situação do equipamento o campo de data é apenas parâmetro para trazer a situação mais atual do equipamento.

    Obrigado.

    terça-feira, 7 de fevereiro de 2012 09:53