none
Menor intervalo de tempo (mesmo campo de data/hora) RRS feed

  • Pergunta

  • Srs, preciso de um Help monstro. Não sei como fazer tal query no SQL Server.

    Tenho ID_ATENDIMENTO(campo: PatientId) e Data/Hora de Medição de pacientes (Campo: TestDateTime) - (pode haver várias medições p/ este paciente). Quando a medição em um paciente for feita num intervalo menor que 5 minutos, devo considerar somente a última. Não posso usar o Max na data, pois isso traria somente 1 registro para a mesma data/hora e na verdade preciso de todas as medições daquele paciente, porém desconsiderar medições foi feita num intervalo menor que 5 minutos. Se o paciente teve várias medições no mesmo dia, isso deve ser considerado sim, porém eliminar o registro onde na mesma data, o tempo foi menor q 5 minutos. 

    Tenho o seguinte resultado:

    Resultado da query

    No exemplo acima, no dia 01/10/2017 o paciente teve 2 medições no intervalo menor que 5 minutos (dados em destaque) e neste dia precisa manter somente a última medição, ou seja, a que ocorreu as 12:34:12. Eu também não posso transformar essas linhas em colunas, pois há pacientes que são feitas mais de mil medições, ou seja, é inviável transformar linhas em colunas. 

    Preciso que traga todas as medições do paciente (Campo: TestDateTime) porém desconsiderar o registro onde, no mesmo dia, há medições num intervalo menor que 5 minutos, ou seja, comparar data/hora no mesmo campo. 

    Alguém sabe como faria essa query?

    Obrigada

    quinta-feira, 2 de novembro de 2017 16:10

Respostas

Todas as Respostas

  • Boa tarde,

    Lúcia, qual versão do SQL Server você está utilizando?

    O intervalo mínimo seria de 5 minutos ou de 5 horas? Porque no exemplo em destaque o intervalo é maior que 5 minutos.

    Considerando que seja de 5 minutos, como deveria ficar o resultado com as medições abaixo?

    - 8:18

    - 8:22

    - 8:26

    - 8:32

    - 8:36


    Assinatura: http://www.imoveisemexposicao.com.br

    quinta-feira, 2 de novembro de 2017 18:50
  • Sim, infeliszmante acabei colocando o exemplo errado (onde mostra um intervalo no mesmo dia maior que 5 minutos), mas o que preciso é isso mesmo que coloquei. 

    Quando, na mesma data, for feito uma medição no paciente onde o intervalo entre as medições seja MENOR QUE 5 MINUTOS, deve-se descartar a primeira medição e ficar somente com a última. 

    Mas o intervalo é de 5 MINUTOS

    quinta-feira, 2 de novembro de 2017 23:36
  • Deleted
    sexta-feira, 3 de novembro de 2017 10:20
  • Olá

    1. Se forem no mesmo dia e uma medição na sequencia da outra, pego somente a última. No exemplo acima deveria permanecer 08:16. (Isso acontece quando a medição do paciente está muito baixa, então se refaz o teste p/ ter certeza do valor). 

    2. Entrei no site da MicroSoft e baixei o SQL Server Management Studio. ultima versão (acredito que seja 2017)

    3. Na verdade é somente o campo: TestDateTime. Os outros campos (Hr_Medicao_glic e Dt_medicao_gli) eu usei um convert para separar data da hora, mas sim, tenho todas as informações de data/hora no campo TestDateTime. 


    sexta-feira, 3 de novembro de 2017 21:03
  • Deleted
    sábado, 4 de novembro de 2017 10:51
  • Olá José, boa tarde

    Sobre a Versão do Banco de Dados

    Executei o comando PRINT @@version e trouxe o seguinte resultado:

     

    Microsoft SQL Server 2008 (RTM) - 10.0.1600.22 (Intel X86)

           Jul  9 2008 14:43:34

           Copyright (c) 1988-2008 Microsoft Corporation

           Standard Edition on Windows NT 6.0 <X86> (Build 6002: Service Pack 2) (VM)

     

    Sobre a query

    Executei a query que você colocou e realmente funcionou exatamente conforme eu precisava, porém não estou conseguindo adaptar na query que eu fiz pelo fato de vocês usarem esse comando With...Go (que na verdade não conheço).

    Minha query é simples como segue:

    SELECT

      t1.PatientId, 

      PatientName,

      TestDescription,

      TestDateTime,

      GlucoseResult,

      .

      .

      Vários outros campos

    FROM

                    tbMedicao

    INNER JOIN

      Tabela 2

     

    LEFT JOIN

     Tabela 3

     

    outros joins simples

    where PatientId Is Not Null ; 

    ;

     

    Nada diferente disso. Como eu encaixo esse comando with….go na minha query?

    Eu entendo que deveria adaptar isso na minha query, mas não com esse comando with....go, correto? Seria com uma subquery?

     

     

    Se puder me ajudar com isso, agradeço imanesamente. Falta muito pouco para conseguir finalizar isso. 

    Deu pra perceber que sou bem novata em sql né

    Mais uma vez, obrigada


    segunda-feira, 6 de novembro de 2017 15:11
  • Deleted
    segunda-feira, 6 de novembro de 2017 17:22
  • Olá José, boa noite

    Só tenho a agradecer. Deu tudo certo sim, conforme eu esperava.

    Apenas respondendo o que você perguntou, a tabela de medições tem aproximadamente 1.096.473 linhas. 

    E a chave primária pki4Test (tabela de testes). 

    Obrigada pela ajuda

    terça-feira, 7 de novembro de 2017 22:10
  • Deleted
    terça-feira, 7 de novembro de 2017 22:47
  • Oi José

    Super obrigada. 

    Vou fazer esse teste amanhã (sexta, 10/11) e conto como ficou a performance. Isso será bom, pois essa tabela tende a crescer bastante. 

    Até amanhã

    quinta-feira, 9 de novembro de 2017 21:55
  • Boa tarde, LúciaFialho.

    Fez o teste? Conseguiu o que precisava?

    Atenciosamente,

    Filipe B de Castro

    Esse conteúdo é fornecido sem garantias de qualquer tipo, seja expressa ou implícita

    MSDN Community Support

    Por favor, lembre-se de Marcar como Resposta as postagens que resolveram o seu problema. Essa é uma maneira comum de reconhecer aqueles que o ajudaram e fazer com que seja mais fácil para os outros visitantes encontrarem a resolução mais tarde.

    sexta-feira, 10 de novembro de 2017 19:44
    Moderador
  • Bom dia,

    Por falta de retorno essa thread está encerrada.

    Se necessário, favor abrir uma nova thread.

    Atenciosamente,


    Filipe B de Castro

    Esse conteúdo é fornecido sem garantias de qualquer tipo, seja expressa ou implícita

    MSDN Community Support

    Por favor, lembre-se de Marcar como Resposta as postagens que resolveram o seu problema. Essa é uma maneira comum de reconhecer aqueles que o ajudaram e fazer com que seja mais fácil para os outros visitantes encontrarem a resolução mais tarde.

    segunda-feira, 20 de novembro de 2017 12:50
    Moderador