Ir para conteúdo
RAFAEL HENRIQUE DE SOUZA

Query recursiva comparando datas

Recommended Posts

Boa noite pessoal. 

Estou com um problema e não consegui sair do lugar, tenho uma tabela de documentos (id, doc, path, ext, id_cli) e outra tabela de controle contendo o Id_documento, tipo_doc, data_criacao.
Preciso informar se o documento listado ja foi substituído.

A regra é a seguinte: Para o documento de mesmo cliente e mesmo tipo ele compara as datas alimentando a coluna de status para o mais recente e substituído par os demais.

Segue o código para ajuda.

create table `tb_documento` (
    `ID_DOCUMENTO` int (11),
    `DOCUMENTO` varchar (60),
    `PATH` varchar (60),
    `EXTENCAO` varchar (15),
    `ID_CLIENTE` int (11)
); 
insert into `tb_documento` (`ID_DOCUMENTO`, `DOCUMENTO`, `PATH`, `EXTENCAO`, `ID_CLIENTE`) values('1','TESTE1','C:\\DOCUMENTOS','PDF','1');
insert into `tb_documento` (`ID_DOCUMENTO`, `DOCUMENTO`, `PATH`, `EXTENCAO`, `ID_CLIENTE`) values('2','TESTE DOC','C:\\DOCUMENTOS','XLS','1');
insert into `tb_documento` (`ID_DOCUMENTO`, `DOCUMENTO`, `PATH`, `EXTENCAO`, `ID_CLIENTE`) values('3','ASLJDBASIHD','C:\\DOCUMENTOS','XLS','1');
insert into `tb_documento` (`ID_DOCUMENTO`, `DOCUMENTO`, `PATH`, `EXTENCAO`, `ID_CLIENTE`) values('4','EXTREME','C:\\DOCUMENTOS','PDF','1');
insert into `tb_documento` (`ID_DOCUMENTO`, `DOCUMENTO`, `PATH`, `EXTENCAO`, `ID_CLIENTE`) values('5','TESTE NOVO','C:\\DOCUMENTOS','DOC','2');
insert into `tb_documento` (`ID_DOCUMENTO`, `DOCUMENTO`, `PATH`, `EXTENCAO`, `ID_CLIENTE`) values('6','WIN','C:\\DOCUMENTOS','DOC','2');
insert into `tb_documento` (`ID_DOCUMENTO`, `DOCUMENTO`, `PATH`, `EXTENCAO`, `ID_CLIENTE`) values('7','XTREME','C:\\DOCUMENTOS','PDF','2');
insert into `tb_documento` (`ID_DOCUMENTO`, `DOCUMENTO`, `PATH`, `EXTENCAO`, `ID_CLIENTE`) values('8','SAMSUNG','C:\\DOCUMENTOS','XLS','2');
insert into `tb_documento` (`ID_DOCUMENTO`, `DOCUMENTO`, `PATH`, `EXTENCAO`, `ID_CLIENTE`) values('9','CPD','C:\\DOCUMENTOS','DOC','3');
insert into `tb_documento` (`ID_DOCUMENTO`, `DOCUMENTO`, `PATH`, `EXTENCAO`, `ID_CLIENTE`) values('10','QQWAS','C:\\DOCUMENTOS','PDF','4');

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

create table `tb_tipo_documento` (
    `ID_TIPO` int (11),
    `ID_DOCUMENTO` int (11),
    `DATA_CRIACAO` datetime 
); 
insert into `tb_tipo_documento` (`ID_TIPO`, `ID_DOCUMENTO`, `DATA_CRIACAO`) values('1','1','2019-06-23 18:18:15');
insert into `tb_tipo_documento` (`ID_TIPO`, `ID_DOCUMENTO`, `DATA_CRIACAO`) values('3','2','2019-06-24 18:19:52');
insert into `tb_tipo_documento` (`ID_TIPO`, `ID_DOCUMENTO`, `DATA_CRIACAO`) values('2','3','2019-06-19 18:20:22');
insert into `tb_tipo_documento` (`ID_TIPO`, `ID_DOCUMENTO`, `DATA_CRIACAO`) values('4','9','2019-06-11 18:31:21');
insert into `tb_tipo_documento` (`ID_TIPO`, `ID_DOCUMENTO`, `DATA_CRIACAO`) values('4','10','2019-06-07 18:31:44');
insert into `tb_tipo_documento` (`ID_TIPO`, `ID_DOCUMENTO`, `DATA_CRIACAO`) values('5','5','2019-06-26 18:32:15');
insert into `tb_tipo_documento` (`ID_TIPO`, `ID_DOCUMENTO`, `DATA_CRIACAO`) values('1','4','2019-06-03 18:32:21');
insert into `tb_tipo_documento` (`ID_TIPO`, `ID_DOCUMENTO`, `DATA_CRIACAO`) values('1','6','2019-06-01 18:36:17');
insert into `tb_tipo_documento` (`ID_TIPO`, `ID_DOCUMENTO`, `DATA_CRIACAO`) values('3','7','2019-06-14 18:36:35');
insert into `tb_tipo_documento` (`ID_TIPO`, `ID_DOCUMENTO`, `DATA_CRIACAO`) values('1','8','2019-06-20 18:36:59');
------------------------------------------------------------------------

Modelo de resultado esperado:
SELECT 
    TD.*,
    TTP.ID_TIPO,
    TTP.DATA_CRIACAO,
    '' AS 'STATUS'
FROM 
    TB_DOCUMENTO TD
LEFT JOIN 
    TB_TIPO_DOCUMENTO TTP ON TTP.ID_DOCUMENTO = TD.ID_DOCUMENTO;
----------------------------------------------------------------------
Pessoal muito obrigado, qualquer ajuda é bem vinda!

 

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 unset
      Olá, estou com uma pequena dúvida 
       
      Como transformar a data que recebemos com a função date("Y-m-d H:i") em uma string 2021-04-22T00:00 exatamente nesse formato ?
    • Por janir.matheus
      Boa tarde, peço ajuda dos membros desse fórum pois confesso estar completamente perdido.
      Tomando como base o diagrama (em anexo), preciso de uma query que retorne as empresas, seus produtos e as categorias de cada produto, sendo que cada produto pode pertencer a uma ou mais categorias.
       
      select tbl_produtos.Empresa, tbl_empresas.Nome, tbl_catprod.Categoria, tbl_classproduto.Classe, tbl_produtos.Id, tbl_produtos.Produto from tbl_produtos inner join tbl_empresas on tbl_produtos.Empresa = tbl_empresas.Id left join tbl_catprod on tbl_produtos.Id = tbl_catprod.Categoria left join tbl_classproduto on tbl_catprod.Categoria = tbl_classproduto.Id; Tentei a consulta mostrada acima mas o resultado não foi o que eu esperava.
      Agradeço antecipadamente pela ajuda.

    • Por unset
      Olá, estou com um probleminha aqui se alguém puder ajudar,
       
      Eu tenho a data em uma coluna no formato date 2020-12-01 e a hora em outra coluna no formato time 09:00:00
       
      Como eu posso saber se a data de hoje é maior do que data e hora dessas 2 colunas?
    • Por FabianoSouza
      Pessoal, por que essa query com COLLATE  não funciona?
      declare @strPesquisa varchar(30) SET @strPesquisa = 'naicle' SET @sql = 'SELECT ' SET @sql = @sql + 'ML.nome ' SET @sql = @sql + 'FROM ' SET @sql = @sql + 'dbo.minhaTab AS ML ' SET @sql = @sql + ' WHERE ' SET @sql = @sql + ' nome LIKE ' SET @sql = @sql + '''%' + @strPesquisa COLLATE Latin1_General_CI_AI + '%''' EXEC (@sql) Não acusa erro ao rodar.
      Mas não traz os registro porque está gravado como "naiclê" (com acento), o que significa que não está aplicando a COLLATE.
       
      Montando essa mesma query mas da forma tradicional, o COLLATE funciona.
       
      SELECT ML.nome FROM dbo.minhaTab AS ML WHERE nome LIKE '%'+ @strPesquisa COLLATE Latin1_General_CI_AI+'%'  
       
    • Por thiagocola
      Eu peguei esse JSON no site do iFood e estou com dúvida de como converter esses 8 números em Time (HH:mm).
      Já tentei timestamp mas 8 dígitos é muito pequeno e já tentei ticks.
      Estou usando C#.
       
      "openingHours": [
                        {
                          "dayOfWeek": "MONDAY",
                          "openingTime": 13500000,
                          "closingTime": 97140000
                        },
                        {
                          "dayOfWeek": "TUESDAY",
                          "openingTime": 13500000,
                          "closingTime": 97140000
                        },
                        {
                          "dayOfWeek": "WEDNESDAY",
                          "openingTime": 13500000,
                          "closingTime": 97140000
                        },
                        {
                          "dayOfWeek": "THURSDAY",
                          "openingTime": 13500000,
                          "closingTime": 97140000
                        },
                        {
                          "dayOfWeek": "FRIDAY",
                          "openingTime": 13500000,
                          "closingTime": 97140000
                        },
                        {
                          "dayOfWeek": "SATURDAY",
                          "openingTime": 13500000,
                          "closingTime": 97140000
                        },
                        {
                          "dayOfWeek": "SUNDAY",
                          "openingTime": 13500000,
                          "closingTime": 97140000
                        }
                      ]
       
      Estou achando que tenho que fazer algum tipo de multiplicação ou em última hipótese, esse valor é algum identificador interno do sistema deles.
       
      Tentei converter assim:
       
      DateTime dtDateTime = new DateTime(1970, 1, 1, 0, 0, 0, 0, DateTimeKind.Utc);
       
      var openingTime = dtDateTime.AddSeconds(13500000).ToLocalTime();
      // {06/06/1970 03:00:00}
       
      var closingTime = dtDateTime.AddSeconds(97140000).ToLocalTime();
      // {29/01/1973 05:20:00}
       
      Mas os valores que retornam não fazem sentido pra mim.
       
×

Informação importante

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