none
Duvida em SELECT (Datas) RRS feed

  • Pergunta

  • Bom dia!

    Estou com duvida em um select que gerei, a estrutura dele me parece correta, mas ao inverter datas, ex. 01/01/2012 -> 01/02/2012 está me retornando a mesma quantidade de dados (incorreto), o que deixa a entender é que o filtro por datas não esta correto, segue o sql:

    SELECT     COUNT(1) AS Total
    FROM         Geral LEFT OUTER JOIN
                          Cidades c ON c.[Cod Cidade] = Geral.[Cod Cidade] LEFT OUTER JOIN
                          Indicadores i ON i.[Código Indicador] = Geral.[Código Indicador] LEFT OUTER JOIN
                          [Tipo Mala Direta] TipoMala ON TipoMala.[Código Tipo Mala] = Geral.[Código Tipo Mala] LEFT OUTER JOIN
                          [Mala Direta] Mala ON Mala.[Código Mala Direta] = Geral.[Código Mala Direta]
    WHERE     (Geral.[Tipo Cliente] = 1) AND (Geral.Safra = 2012) AND (NOT EXISTS
                              (SELECT     [Geral Histórico].[Ano Pedido]
                                FROM          [Geral Histórico]
                                WHERE      [Geral Histórico].[Código Geral] = Geral.[Código Geral] AND Geral.[Data Cadastro] < '01/01/2012' AND 
                                                       [Geral Histórico].[Ano Pedido] < '2012')) AND EXISTS
                              (SELECT     [Geral Histórico].[Ano Pedido]
                                FROM          [Geral Histórico]
                                WHERE      [Geral Histórico].[Código Geral] = Geral.[Código Geral] AND Geral.[Data Cadastro] >= '01/01/2012' AND 
                                                       [Geral Histórico].[Ano Pedido] = '2012')

    Obrigado desde já.


    Dalto Blanco - Ciência da computação

    quarta-feira, 6 de março de 2013 12:58

Respostas

  • Dalto,

    Faça um teste acrescente as funções Month, Year e Day fazendo o filtro através dos valores que podem ser passados para estas funções dentro do seu Select.

    Outro possibilidade seria utilizar o comando Between na claúsula Where.


    Pedro Antonio Galvão Junior [MVP | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados | SorBR.Net | Professor Universitário | MSIT.com]

    • Marcado como Resposta Dalto P. Blanco segunda-feira, 25 de agosto de 2014 12:54
    sábado, 9 de março de 2013 16:57

Todas as Respostas

  • Bom dia ! aparentemente a sintaxe esta ok, qual o formato da sua data DD/MM/AAAAA ou MM/DD/AAAA ?

    Alexandre Matayosi Conde Mauricio. Se esta sugestão for útil, por favor, classifique-a como útil. Se ela lhe ajudar a resolver o problema, por favor, marque-a como Resposta.

    quarta-feira, 6 de março de 2013 13:15
  • O formato de data utilizado é: DD/MM/AAAAA

    Obrigado.


    Dalto Blanco - Ciência da computação

    quarta-feira, 6 de março de 2013 13:18
  • Ok, voce disse que se trocar o 01/01/2012 por 01/02/2012 mostra a mesma quantidade de registros, certo ? será que nas suas tabelas de datas existem datas entre 01/01 e 01/02 ? Outro detalhe que percebi é que nos subselects no seu where na primeira condicação esta < 01/01/2012 e voce faz um exists na mesma tabela com uma condição >= 01/01/2012, logo só vai pegar a data de 01/01/2012, isto esta certo ?

    Alexandre Matayosi Conde Mauricio. Se esta sugestão for útil, por favor, classifique-a como útil. Se ela lhe ajudar a resolver o problema, por favor, marque-a como Resposta.

    quarta-feira, 6 de março de 2013 13:41
  • Ok, voce disse que se trocar o 01/01/2012 por 01/02/2012 mostra a mesma quantidade de registros, certo ? será que nas suas tabelas de datas existem datas entre 01/01 e 01/02 ? - Sim, irá ter um grande diferença de registros de um mês para o outro.

    Outro detalhe que percebi é que nos subselects no seu where na primeira condicação esta < 01/01/2012 e voce faz um exists na mesma tabela com uma condição >= 01/01/2012, logo só vai pegar a data de 01/01/2012, isto esta certo ? - No meu caso, preciso que ele filtre os dados da tabela de maneira que NÃO EXISTA nenhum dado com data < 01/01/2012 E EXISTA dados com data >= 01/01/2012. Ao meu entender ele não pode me trazer nada com data < 01/01/2012 porém me retorna todos com data >= 01/01/2012. Um pouco complexo rs

    Obrigado


    Dalto Blanco - Ciência da computação

    quarta-feira, 6 de março de 2013 14:22
  • E se voce retirar os filtros de [Data Cadastro] e deixar somente o [Ano Pedido] = '2012' ?

    Alexandre Matayosi Conde Mauricio. Se esta sugestão for útil, por favor, classifique-a como útil. Se ela lhe ajudar a resolver o problema, por favor, marque-a como Resposta.

    quarta-feira, 6 de março de 2013 14:40
  • Esse select esta em uso a algum tempo e funciona com o filtro do [Ano Pedido]. Agora preciso desenvolver para filtrar pelo [Ano Pedido] e a [Data Cadastro]... Irei quebrar um pouco mais a cabeça nisso... 

    Obrigado!


    Dalto Blanco - Ciência da computação

    quarta-feira, 6 de março de 2013 16:24
  • Dalto,

    Faça um teste acrescente as funções Month, Year e Day fazendo o filtro através dos valores que podem ser passados para estas funções dentro do seu Select.

    Outro possibilidade seria utilizar o comando Between na claúsula Where.


    Pedro Antonio Galvão Junior [MVP | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados | SorBR.Net | Professor Universitário | MSIT.com]

    • Marcado como Resposta Dalto P. Blanco segunda-feira, 25 de agosto de 2014 12:54
    sábado, 9 de março de 2013 16:57