Usuário com melhor resposta
ANALISANDO INTERVALO DE DATAS E TRAZENDO RESULTADO ESPECIFICO.

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.
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
-
-
-
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]
-
-
-
-
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]
-
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...
-
-
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.
-
-
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.