Ir para conteúdo
Everton Lins de Paulo

Comparar campo com a linha anterior no oracle

Recommended Posts

Tenho essa query:

----------------------------------------------------------------------- 

  SELECT     codigo, entrada, alta, sequencia

    from atendimentos

     where codigo = 108

----------------------------------------------------------------------- 

que me retorna o seguinte:

------------------------------------------------------------------------------------------------------------ 

codigo                 entrada                               alta                   sequencia

108,       '21/10/2018 00:00:00',    '31/10/2018 00:00:00',       1
108,       '07/11/2018 00:00:00',    '08/11/2018 00:00:00',       2
108,       '11/11/2018 00:00:00',    '13/11/2018 00:00:00',       3
108,       '12/12/2018 00:00:00',    '13/12/2018 00:00:00',       4

------------------------------------------------------------------------------------------------------------

Preciso comparar se a alta da sequencia inferior está num prazo de 15 dias e assim com todas.
Ex:

Minha sequencia 1 não vai ter nenhuma alta acima dela, então ela vai ter a resposta NÃO
A alta da sequencia 1 é menor de 15 dias da entrada da sequencia 2? A resposta vai ser SIM 
A alta da sequencia 2 é menor de 15 dias da entrada da sequencia 3? A resposta vai ser SIM 
A alta da sequencia 3 é menor de 15 dias da entrada da sequencia 4? A resposta vai ser NÃO

Ficaria assim:

-----------------------------------------------------------------------------------------------------------------------------------------------------

codigo                 entrada                               alta                   sequencia        Reinternação

108,       '21/10/2018 00:00:00',    '31/10/2018 00:00:00',       1                        NÃO
108,       '07/11/2018 00:00:00',    '08/11/2018 00:00:00',       2                        SIM
108,       '11/11/2018 00:00:00',    '13/11/2018 00:00:00',       3                        SIM
108,       '12/12/2018 00:00:00',    '13/12/2018 00:00:00',       4                        NÃO

-----------------------------------------------------------------------------------------------------------------------------------------------------

Algum amigo conhece algum comando para fazer isso?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tente fazervum join com a própria tabela fazendo o join com sequencia=sequencia-1

 

Se tiver tempo amanhã posto uma solução , estou no tablet , ruim de editar.

Compartilhar este post


Link para o post
Compartilhar em outros sites

TENTE ALGO ASSIM

SELECT A1.CODIGO, A1.ENTRADA, A1.ALTA, A1.SEQUENCIA,
       (CASE WHEN (A2.ENTRADA - A1.ALTA) > 15 THEN 'NAO' ELSE 'SIM' END) REINTER
FROM   ATENDIMENTOS A1,ATENDIMENTOS A2
WHERE  A1.CODIGO = 108
AND    A1.SEQUENCIA = A2.SEQUENCIA+1 (+)--PROXIMA

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar Agora

  • Conteúdo Similar

    • Por Markleber
      Boa tarde à todos... Sou totalmente leigo em SQL e estou precisando de uma ajuda de vocês, aliás, um excelente ajuda. Tenho duas tabelas abaixo:
      Tabela linaus07
      d01 d02 d03 d04 d05 d06 d07 10 11 12 13 14 15 16 10 11 12 13 14 16 17 10 11 12 13 14 16 22  
      Tabela linrep07
      d01 d02 d03 d04 d05 d06 d07 d08 d09 d10 d11 d12 d13 d14 d15 1 2 3 4 5 6 7 10 11 12 13 14 16 17 22 1 2 3 4 5 6 7 8 10 11 12 13 14 16 17 1 2 3 4 5 6 7 9 10 11 12 13 14 16 22  
      Então, o que preciso...???
      Pego o 1 registro da tabela linaus07 contendo 7 campos e confronto com todos os registros da tabela linrep07 contendo 15 campos, reparem que o primeiro registro da tabela linaus07, confrontando com a tabela linrep07, em nenhum momento continha 7 iguais nos registros, então, não preciso fazer nada, porém, repare agora, que o segundo registro da tabela linaus07, confrontando com a tabela linrep07, encontramos 7 campos exatamente nos 15 campos da outra tabela, então, pego o registro da tabela linrep07 e gravo em outro banco de dados (um novo), o registro que contem esses 15 campos que tinham os 7 campos da tabela linaus07.
      o que tem que ser respeitado...
      Cada registro da tabela linaus07 contendo 7 campos, irá passar em todos os registros da tabela linrep07 contendo 15 campos e irá colocar num novo banco de dados, todos os registros que da tabela linrep07 tiverem exatamente os 7 campos da tabela linaus07 e ao final, esse novo banco, terá com certeza muito registros, mas preciso salvá-los em um arquivo .txt com o separador "-" entre os campos...
      Espero ter sido claro... Obrigado 
      MARCELO SAMPAIO
    • Por patrick.menezes
      Boa tarde pessoal !
       
      Como faço para comparar os valores entre duas tabelas e retornar um valor final ?
       
      Por exemplo: 
      Leia valor
      col1 = vazão(float) e
      col2 = turbidez (float)  e
      col3 = pH  (float) agora compare e busque o resultado na col4 
      solução = valor pre estabelecido na col4
       
      Quando
      vazão digitada pelo usuário estiver entre dois valores da tabela de referência ( X e Y )
      turbidez digitada pelo usuário estiver entre dois valores ( X e Y)
      pH digitado pelo usuário estiver entre dois valores ( X e Y)
      então o Mysql retorna um valor pre estabelecido na col4.
       
      Alguém poderia me ajudar a resolver este problema?
       
      Agradeço desde já.
       
    • Por Pitag346
      Oi pessoal, Beleza?
      Preciso de ajuda....
      Resumidamente:
      Eu armazeno varios dados no banco de dados inclusive alguns id's que estão em array...
      eles são armazenados com virgulas (pelo implode)...
      ou seja, os id's são armazenados desas forma: (1,2,3,4)
      Esses ids, eu preciso utilizar um SELECT neles para executar um WHILE ...
       
      Completo:
      Tenho um sistema em php + mysqli... onde 1 grupo de usuários faz upload de arquivos... esse grupo pode escolher quais grupos podem visualizar esse arquivo...
      podem escolher varios grupos ou apenas 1, ou até nenhum...
      para isso estou utilizando checkbox com array ... (<input type="checkbox" name="turma[]"/>).
      Faço o envio via POST e com o explode eu separo com virgulas... 
      Ficando da forma que mencionei lá em cima... (1,2,3,4)
      mas preciso fazer um select e verificar esse campo que tem esses valores com virgulas... o detalhe que no select preciso verificar se o ID DO GRUPO é um dos que estão dentro da virgula se for faço a exibição ... se não, não é exibido...
      Obs: como serão varios arquivos enviados será necessário um WHILE ...
      Não faço ideia como fazer...
      Se não entenderem oq eu realmente estou precisando... podem estar solicitando que faço o anexo de imagens... 
       
      Att.
      desde já, Obrigado!
       
       
       
       
       
       
    • Por JhoniWillian
      Boa noite galera, estou com uma dúvida..
       
      Estou fazendo um select em uma variavel e depois pego o valor da coluna ''data_inicio'' desse select e armazeno em uma variavel, e pego o valor da coluna ''data_fim'' e armazeno em outra variável.
       
      Essas informações estão vindo em datetime do MySQL para mim. então no select eu faço
       
      SELECT DATE_FORMAT(data_inicio, '%d/%m %H:%i') as data_inicio, DATE_FORMAT(data_fim , '%d/%m %H:%i') as data_fim FROM pixie_andon_nc. $data_inicio = ['data_inicio'];
      $data_fim = ['data_fim'];
       
      para as data vir: DIA/MES Hora/Min ''08/10 18:25'' 
       
      As duas data me trazem a informação correta, porém, agora eu preciso comparar essas duas datas e saber qual é a maior e a menor.
       
      Estou fazendo a comparação porém, ele está levando em consideração somente o dia.
       
      Por exemplo
       
      Se a datas forem
       
      inicio = 08/10 10:00
      fim = 09/10 10>00
       
      ele fala que o Inicio é menor que o FIm. até ai está ok.
       
      agora se vira o mês, ele me trás divergência, por exemplo.
       
      inicio = 08/10 10:00
      fim = 01/11 10:00
       
      ele fala que o inicio é maior, porque está considerando somente o dia, ou seja, o dia 8 é maior que o dia 01... porém está errado pq o dia 1 é do outro mês
       
    • Por cfandrade
      Olá boa noite, estou precisando fazer uma consulta em uma tabela onde o campo data está no formato datetime e preciso verificar se somente a data é igual ao currente_date.
       
      Segue a minha tabela.
      CREATE TABLE `tb_newsletter` (     `NEW_COD` INT(11) NOT NULL AUTO_INCREMENT,     `LEI_COD` INT(11) NULL DEFAULT '0',     `LEI_EMAIL` VARCHAR(150) NOT NULL DEFAULT '0',     `NEW_DT_CADASTRO` DATETIME NOT NULL DEFAULT '0000-00-00 00:00:00',     `NEW_STATUS` VARCHAR(50) NULL DEFAULT '0',     PRIMARY KEY (`NEW_COD`),     INDEX `LEI_COD` (`LEI_COD`) ) COLLATE='utf8_general_ci' ENGINE=InnoDB AUTO_INCREMENT=2 Segue o código que eu estava tentando, preciso fazer a consulta nessa tabela para me apresentar somente os novos cadastros do dia atual ignorando os cadastros antigos.
      SELECT COUNT(NEW_COD) AS TOTAL FROM `tb_newsletter` WHERE 'NEW_DT_CADASTRO' = CURRENT_DATE;  
      Obrigado a todos.
×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.