none
ANALISANDO INTERVALO DE DATAS E TRAZENDO RESULTADO ESPECIFICO. RRS feed

  • Pergunta

  • Bom dia amigos,

    seguinte preciso fazer um select que ele verifique um intervalo de datas que é gravado linha a linha com data inicial e final e é gerado um codigo para cada periodo e traga somente o periodo que  a NF foi emitida.

    exemplo:

    PERIODO VEICULO DTINICIO DTFIN
    1 AOZ1136          20120101 20141008
    2 AOZ1136          20141008 20141216
    3 AOZ1136          20141216 20150120
    4 AOZ1136          20150120 20150312
    5 AOZ1136          20150312 20150527
    6 AOZ1136          20150610 NULL  

    dai a NF foi emitida em 20150219---- o resultado seria o periodo 4.

    preciso verificar linha a linha e e achar a data de emissão da NF dentro do periodo?



    Tiago solon - aprendedo SQL.

    sexta-feira, 24 de julho de 2015 12:58

Respostas

Todas as Respostas

  • Bom dia,

    Experimente mais ou menos dessa forma:

    where
        @DataEmissao >= DTINICIO AND
        (@DataEmissao <= DTFIN or DTFIN IS NULL)

    Espero que ajude.


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

    sexta-feira, 24 de julho de 2015 13:06
  • Deleted
    sexta-feira, 24 de julho de 2015 13:38
  • deve der considerada.

    Tiago solon - aprendedo SQL.

    sexta-feira, 24 de julho de 2015 14:23
  • Tiago,

    Se ela for nula, você gostaria de especificar um valor default?

    Caso sim, poderia fazer uso da função IsNull() e definir o data atual como valor através da função GetDate().


    Pedro Antonio Galvao Junior [MVP | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados | Professor Universitario | SoroCodigos | @JuniorGalvaoMVP | http://pedrogalvaojunior.wordpress.com]

    sexta-feira, 24 de julho de 2015 14:33
  • quando uso dessa forma ou com o between ele demora muito esperei ate 35 minutos  ai cancelei.

    preciso de uma forma mais eficiente ate mesmo prq são muito registro pra ele verificar.


    Tiago solon - aprendedo SQL.

    sexta-feira, 24 de julho de 2015 15:07
  • essa parte ta tranquilo o rolo mesmo é pra ele trazer o periodo correto prq a consulta demora muito utilizando o between ou >= e <= em 35  minutos cancelei. 

    Tiago solon - aprendedo SQL.

    sexta-feira, 24 de julho de 2015 15:09
  • Deleted
    sexta-feira, 24 de julho de 2015 15:16
  • Tiago,

    Por acaso, você esta fazendo uso da função Convert na sua claúsula Where para converter os valores do tipo data?


    Pedro Antonio Galvao Junior [MVP | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados | Professor Universitario | SoroCodigos | @JuniorGalvaoMVP | http://pedrogalvaojunior.wordpress.com]

    sexta-feira, 24 de julho de 2015 18:53
  • Tiago, como o SQL server utilizada data + hora, pra você pegar só a Data poderia utilizar a funcão CAST.

    Ou então se independe do dia e ano, você pode pegar apenas o intervalo de mês usando o DATEPART, então, se o mes é entre 01 e 03, ele traz o período 4.

    Não sei se é bem isso que você quer...


    domingo, 26 de julho de 2015 16:02
  • SIM ESTOU CONVERTENDO.

    Tiago solon - aprendedo SQL.

    segunda-feira, 27 de julho de 2015 11:39
  • Bom dia aqui esta o select completo.... tabelas que iniciam com VW são Views com joins.... porem consegui o resultada que espera com 40 minutos mais creio que o melhor a fazer serio indices por data mesmo como os amigos indicaram aqui.... adiferença é que o indice teria q ser na View.

      

    SELECT 
     DT6.DT6_TABFRE, DT6.DT6_DOCTMS,P.FILIAL AS FILREC, (CASE WHEN DT6.DT6_FILDOC = '010101' THEN 'FORTALEZA' WHEN DT6.DT6_FILDOC = '010102' THEN 'SÃO LUIZ' WHEN DT6.DT6_FILDOC
    = '010103' THEN 'TERESINA' WHEN DT6.DT6_FILDOC = '010104' THEN 'BELEM' WHEN DT6.DT6_FILDOC = '010105' THEN 'MANAUS'
     WHEN DT6.DT6_FILDOC = '010106' THEN 'NATAL' WHEN DT6.DT6_FILDOC= '010107' THEN 'PORTO VELHO' WHEN DT6.DT6_FILDOC
    = '010108' THEN 'JABOATÃO' WHEN DT6.DT6_FILDOC = '010109' THEN 'CABEDELO' WHEN DT6.DT6_FILDOC = '010110' THEN 'AÇAILANDIA'
    WHEN DT6.DT6_FILDOC = '010111' THEN 'MACEIO' WHEN DT6.DT6_FILDOC = '010112' THEN 'ALMERIM' WHEN DT6.DT6_FILDOC
     = '010113' THEN 'SNA' WHEN DT6.DT6_FILDOC = '010114' THEN 'CANDEIAS' WHEN DT6.DT6_FILDOC = '010116' THEN 'HORIZONTE'
    WHEN DT6.DT6_FILDOC = '010117' THEN 'IPOJUCA' END) NOME_FIL,  

      CONVERT(date, DTC.DTC_EMINFC, 101) AS DT6_DATEMI, DT6.DT6_HOREMI,P.TPN_DTINIC, DT6.DT6_TIPTAB, DT6.DT6_FILDOC, DT6.DT6_DOC, DT6.DT6_SERIE,DT6.DT6_VALTOT, SB1.B1_DESC,
      DTR.DTR_CODVEI AS PLACA, DTR.DTR_CODRB1 AS PLACA_2, DTR.DTR_CODRB2 AS PLACA_3,T9.TQR_DESMOD,

    (CASE WHEN DT6.DT6_SERIE = 'DAP' THEN 'DAP' ELSE DT6.DT6_SERIE END) AS TIPDOC,
    (CASE WHEN DT6.DT6_SERIE = 'DAP' THEN 'DAP' ELSE 'CTE' END) AS TIPDOC2
    FROM            DT6010 AS DT6 RIGHT OUTER JOIN
                             DTC010 AS DTC ON DTC.DTC_FILORI = DT6.DT6_FILDOC AND DTC.DTC_DOC = DT6.DT6_DOC AND DTC.DTC_SERIE = DT6.DT6_SERIE RIGHT OUTER JOIN
                             SB1010 AS SB1 ON SB1.B1_COD = DTC.DTC_CODPRO
    RIGHT JOIN
                             DTP010 AS DTP ON DTP.DTP_FILORI=DT6.DT6_FILORI AND DTP.DTP_LOTNFC=DT6.DT6_LOTNFC  
        RIGHT JOIN 
                             DTQ010 AS DTQ ON DTQ.DTQ_FILORI=DTP.DTP_FILORI AND DTQ.DTQ_VIAGEM=DTP.DTP_VIAGEM  
        INNER JOIN
                             DTR010 AS DTR ON DTR.DTR_FILORI = DTQ.DTQ_FILORI AND DTR.DTR_VIAGEM = DTQ.DTQ_VIAGEM AND DTR.D_E_L_E_T_ = ' '
    INNER JOIN
    VW_BEM_MODELO AS T9 ON DTR.DTR_CODRB1=T9.T9_CODBEM
    INNER JOIN
    VW_TPN_x_CTT AS P ON DTR.DTR_CODRB1=P.TPN_CODBEM AND DTC.DTC_EMINFC BETWEEN P.TPN_DTINIC AND P.TPN_DTFINA
    WHERE (DT6.DT6_FILDOC <= '010117') AND datepart(YYYY,DTC.DTC_EMINFC) = datepart (YYYY,getdate()) AND datepart(MM,DTC.DTC_EMINFC) = datepart (MM,getdate()) AND
    (DTC.DTC_EMINFC >=P.TPN_DTINIC AND (DTC.DTC_EMINFC<=P.TPN_DTFINA or P.TPN_DTFINA is null)) AND
    (DT6.DT6_TIPTAB in ( '02','04','06')) AND  (DT6.D_E_L_E_T_ = ' ')                                                                                                                                                                                                                                                                                                                                                                                                                                              grato pelo ajuda de todos.



    Tiago solon - aprendedo SQL.

    segunda-feira, 27 de julho de 2015 11:48
  • Deleted
    segunda-feira, 27 de julho de 2015 14:33
  • Deleted
    • Sugerido como Resposta Marcos SJ segunda-feira, 27 de julho de 2015 18:22
    • Marcado como Resposta Marcos SJ sexta-feira, 31 de julho de 2015 18:49
    segunda-feira, 27 de julho de 2015 15:17
  • Boa tarde,

    Por falta de retorno do usuário, esta thread será encerrada.

    Caso seja necessário, por gentileza, abra uma thread nova.

    Atenciosamente


    Marcos Roberto de Souza Junior

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

    MSDN Community Support

    Por favor, lembre-se de Marcar como Resposta as respostas que resolveram o seu problema. Essa e 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, 31 de julho de 2015 18:49