none
GETDATE() COM ACUMULADO DE 7 DIAS RRS feed

  • Pergunta

  • Olá pessoa, estou com uma duvida com relação ao comando abaixo.

     

    É uma parte de um comando que eu fiz, mas preciso de ajuda, depois do GETDATE(), onde eu preciso de um acumulado dos últimos 7 dias, tentei fazer isso no comando abaixo, mas não consegui, ele não acumula, apenas me da um dia anterior, ou 2 dias antes, etc, ou seja, sempre o dia atual GETDATE(), mais os ultimos 7 dias

     

     

    (SUBSTRING(dbo.tblWRIAtoObs.Observacoes, CHARINDEX('Data Pedido:', dbo.tblWRIAtoObs.Observacoes) + 13, 10)    = CONVERT(CHAR(10), GETDATE(), 103))

    Data do pedido

    20/10/2016

    (SUBSTRING(dbo.tblWRIAtoObs.Observacoes, CHARINDEX('Data Pedido:', dbo.tblWRIAtoObs.Observacoes) + 13, 10)    = CONVERT(CHAR(10), GETDATE()-1, 103))

     

    Data do pedido

    19/10/2016

    (SUBSTRING(dbo.tblWRIAtoObs.Observacoes, CHARINDEX('Data Pedido:', dbo.tblWRIAtoObs.Observacoes) + 13, 10)    = CONVERT(CHAR(10), GETDATE()-2, 103))

     

    Data do pedido

    18/10/2016

    Eu preciso de uma forma que eu pegue sempre um acumulado dos últimos 7 dias, ou seja , um exemplo seria do dia 14 ate 20, partindo do dia de hoje,

    Se for amanha dia 21, que acumule do dia 15 ate 21, e assim por diante.

    Alguem pode me ajudar?

    quinta-feira, 20 de outubro de 2016 13:22

Respostas

  • 1) vc falou em acumular, mas não vi os campos valores na sua query , para acumular

    2) se puder roda seu trecho fazendo um top 3 sem os wheres

    SELECT  top 3
            VwPart.NomeOnlu ,
            SUBSTRING(TOBs.Observacoes, CHARINDEX('Data Pedido:', TOBs.Observacoes) + 13, 10) AS Data_Pedido ,
            SUBSTRING(TOBs.Observacoes, 33, 28) AS Comunicado 
           
    FROM    dbo.vwWRIAtosParticipantes AS VwPart
            INNER JOIN dbo.tblWRIAtosNegocios AS TNegocio ON TNegocio.PK_ID = VwPart.FK_tblWRIAtosNegocios_Id
            INNER JOIN dbo.tblWRIAtos AS TAtos ON TAtos.PK_ID = TNegocio.FK_tblWRIAtos_Id
            INNER JOIN dbo.tblWRIAtoObs AS TOBs ON TOBs.FK_tblWRIAtos_Id = dTAtos.PK_ID
            INNER JOIN dbo.tblWRIAtosParticipantes AS TParc ON TParc.FK_tblWRIPessoas_Id = VwPart.FK_tblWRIPessoas_Id
            INNER JOIN dbo.tblWRIReal TReal ON TReal.PK_ID = TAtos.FK_tblWRIReal_Id
    WHERE   ( TReal.FK_tblWRILivro_Id = 15 )


    Wesley Neves


    • Editado Wesley Neves quinta-feira, 20 de outubro de 2016 15:58 Erro
    • Marcado como Resposta Ana Paula Rocha quinta-feira, 20 de outubro de 2016 16:26
    quinta-feira, 20 de outubro de 2016 15:58

Todas as Respostas

  • O que voce quer dizer com acumule? Qual campo voce quer que seja acumulado?

    Para isso isso voce deveria fazer:

    (SUBSTRING(dbo.tblWRIAtoObs.Observacoes, CHARINDEX('Data Pedido:', dbo.tblWRIAtoObs.Observacoes) + 13, 10)    between CONVERT(CHAR(10), GETDATE()-7, 103)) and CONVERT(CHAR(10), GETDATE(), 103))

    mas eu nao conheco sua query completa.

    att


    William John Adam Trindade
    Analyste-programmeur
    ----------------------------------------------------------

    quinta-feira, 20 de outubro de 2016 13:35
  • EU NAO POSSO JOGAR O BETWEEN TEM QUE SER O IGUAL
    quinta-feira, 20 de outubro de 2016 14:38
  • Poderia explicar o por quê? Eu nao vejo outra soluçao.

    Att


    William John Adam Trindade
    Analyste-programmeur
    ----------------------------------------------------------

    quinta-feira, 20 de outubro de 2016 14:46
  • Porque a substring que estou usando pega uma parte do campo observação, que tem data, e varias outras informações no mesmo campo, sendo assim preciso fazer a formatação correta.

    No que voce enviou nao funciona tambem.

    quinta-feira, 20 de outubro de 2016 15:01
  • Bom dia , Para vc fazer um valor acumulado, vc vai precisar de um intervalo  de hoje a sete dias atras,

    1) Como vc vai acumular usando  o igual

    2) posta  seu exemplo do trecho seu  Where 

    fiz algo assim , não sei se te ajuda

    WHERE   CONVERT(CHAR(10),( cast( ( seu trecho que vc recupera a data ) as date ) , 103) BETWEEN CONVERT(CHAR(10), CAST(DATEADD(DAY, -7, GETDATE()) AS DATE) , 103) AND     CONVERT(CHAR(10), CAST(GETDATE() AS DATE) , 103)


    Wesley Neves

    quinta-feira, 20 de outubro de 2016 15:11
  • Deu certo o que voce mandou, só um detalhe que tambem nao sei se tem a ver com a data,

    mas ele trouxe assim:

    20/10/2016
    20/10/2016
    20/10/2016

    20/10/2015
    20/10/2015
    20/10/2015

    20/09/2016
    20/09/2016
    20/09/2016

    20/09/2015
    20/09/2015
    20/09/2015

    quinta-feira, 20 de outubro de 2016 15:25
  • Sem conhecer sua query completa, fica dificil te ajudar...

    Poderia posta-la aqui?

    Att


    William John Adam Trindade
    Analyste-programmeur
    ----------------------------------------------------------

    quinta-feira, 20 de outubro de 2016 15:30
  • SELECT DISTINCT

                          dbo.vwWRIAtosParticipantes.NomeOnlu, SUBSTRING(dbo.tblWRIAtoObs.Observacoes, CHARINDEX('Data Pedido:', dbo.tblWRIAtoObs.Observacoes) + 13, 10)

                          AS Data_Pedido, SUBSTRING(dbo.tblWRIAtoObs.Observacoes, 33, 28) AS Comunicado, dbo.formata_cnpj_cpf(dbo.tblWRIAtosParticipantes.DocumentosFull)

                          AS CPF_CNPJ

    FROM         dbo.vwWRIAtosParticipantes INNER JOIN

                          dbo.tblWRIAtosNegocios ON dbo.tblWRIAtosNegocios.PK_ID = dbo.vwWRIAtosParticipantes.FK_tblWRIAtosNegocios_Id INNER JOIN

                          dbo.tblWRIAtos ON dbo.tblWRIAtos.PK_Id = dbo.tblWRIAtosNegocios.FK_tblWRIAtos_Id INNER JOIN

                          dbo.tblWRIAtoObs ON dbo.tblWRIAtoObs.FK_tblWRIAtos_Id = dbo.tblWRIAtos.PK_Id INNER JOIN

                          dbo.tblWRIAtosParticipantes ON dbo.tblWRIAtosParticipantes.FK_tblWRIPessoas_Id = dbo.vwWRIAtosParticipantes.FK_tblWRIPessoas_Id INNER JOIN

                          dbo.tblWRIReal ON dbo.tblWRIReal.PK_Id = dbo.tblWRIAtos.FK_tblWRIReal_Id

    WHERE     (dbo.tblWRIReal.FK_tblWRILivro_Id = 15)

     


    AND (SUBSTRING(dbo.tblWRIAtoObs.Observacoes, CHARINDEX('Data Pedido:', dbo.tblWRIAtoObs.Observacoes) + 13, 10)  

    BETWEEN CONVERT(CHAR(10), CAST(DATEADD(DAY, -7, GETDATE()) AS DATE) , 103) AND     CONVERT(CHAR(10), CAST(GETDATE() AS DATE) , 103))

    order by Data_Pedido desc

    RESULTADOS:

    20/10/2016
    20/10/2016
    20/10/2016

    20/10/2015
    20/10/2015
    20/10/2015

    20/09/2016
    20/09/2016
    20/09/2016

    20/09/2015
    20/09/2015
    20/09/2015


    quinta-feira, 20 de outubro de 2016 15:35
  • Esse '20/10/2016' e o formato de data , que está no formato pt-BR, 

    aplicado pelo trecho CONVERT(CHAR(10), CAST(DATEADD(DAY, -7, GETDATE()) AS DATE) , 103)

    Para mais informações tem esse link

    https://augustopierzynski.wordpress.com/2011/08/25/formatando-data-no-sql-server/

    ou uma pesquisa aqui no forum.

    Se puder posta um trecho doseu Código.


    Wesley Neves

    quinta-feira, 20 de outubro de 2016 15:36
  • SELECT DISTINCT

                          dbo.vwWRIAtosParticipantes.NomeOnlu,SUBSTRING(dbo.tblWRIAtoObs.Observacoes, CHARINDEX('Data Pedido:',dbo.tblWRIAtoObs.Observacoes) + 13, 10)

                          AS Data_Pedido, SUBSTRING(dbo.tblWRIAtoObs.Observacoes, 33, 28) ASComunicado, dbo.formata_cnpj_cpf(dbo.tblWRIAtosParticipantes.DocumentosFull)

                          AS CPF_CNPJ

    FROM         dbo.vwWRIAtosParticipantes INNER JOIN

                          dbo.tblWRIAtosNegocios ON dbo.tblWRIAtosNegocios.PK_ID =dbo.vwWRIAtosParticipantes.FK_tblWRIAtosNegocios_Id INNER JOIN

                          dbo.tblWRIAtos ON dbo.tblWRIAtos.PK_Id =dbo.tblWRIAtosNegocios.FK_tblWRIAtos_Id INNER JOIN

                          dbo.tblWRIAtoObs ON dbo.tblWRIAtoObs.FK_tblWRIAtos_Id =dbo.tblWRIAtos.PK_Id INNER JOIN

                          dbo.tblWRIAtosParticipantes ONdbo.tblWRIAtosParticipantes.FK_tblWRIPessoas_Id =dbo.vwWRIAtosParticipantes.FK_tblWRIPessoas_Id INNER JOIN

                          dbo.tblWRIReal ON dbo.tblWRIReal.PK_Id =dbo.tblWRIAtos.FK_tblWRIReal_Id

    WHERE     (dbo.tblWRIReal.FK_tblWRILivro_Id = 15)

     

    AND (SUBSTRING(dbo.tblWRIAtoObs.Observacoes, CHARINDEX('Data Pedido:',dbo.tblWRIAtoObs.Observacoes) + 13, 10)  

    BETWEEN CONVERT(CHAR(10), CAST(DATEADD(DAY, -7, GETDATE()) AS DATE) , 103) AND    CONVERT(CHAR(10), CAST(GETDATE() AS DATE) , 103))

    order by Data_Pedido desc

    RESULTADOS:

    20/10/2016
    20/10/2016
    20/10/2016

    20/10/2015
    20/10/2015
    20/10/2015

    20/09/2016
    20/09/2016
    20/09/2016

    20/09/2015
    20/09/2015
    20/09/2015
    quinta-feira, 20 de outubro de 2016 15:36
  • Por acaso existe mais de uma data de pedido dentro do campo Observacoes? Creio que seja um campo tipo texto livre (certo?), existem casos onde um mesmo regitro possua mais de uma data?

    att


    William John Adam Trindade
    Analyste-programmeur
    ----------------------------------------------------------

    quinta-feira, 20 de outubro de 2016 15:42
  • Sim, correto, existe varias datas dentro do campo observacoes
    quinta-feira, 20 de outubro de 2016 15:44
  • Deleted
    quinta-feira, 20 de outubro de 2016 15:50
  • 1) vc falou em acumular, mas não vi os campos valores na sua query , para acumular

    2) se puder roda seu trecho fazendo um top 3 sem os wheres

    SELECT  top 3
            VwPart.NomeOnlu ,
            SUBSTRING(TOBs.Observacoes, CHARINDEX('Data Pedido:', TOBs.Observacoes) + 13, 10) AS Data_Pedido ,
            SUBSTRING(TOBs.Observacoes, 33, 28) AS Comunicado 
           
    FROM    dbo.vwWRIAtosParticipantes AS VwPart
            INNER JOIN dbo.tblWRIAtosNegocios AS TNegocio ON TNegocio.PK_ID = VwPart.FK_tblWRIAtosNegocios_Id
            INNER JOIN dbo.tblWRIAtos AS TAtos ON TAtos.PK_ID = TNegocio.FK_tblWRIAtos_Id
            INNER JOIN dbo.tblWRIAtoObs AS TOBs ON TOBs.FK_tblWRIAtos_Id = dTAtos.PK_ID
            INNER JOIN dbo.tblWRIAtosParticipantes AS TParc ON TParc.FK_tblWRIPessoas_Id = VwPart.FK_tblWRIPessoas_Id
            INNER JOIN dbo.tblWRIReal TReal ON TReal.PK_ID = TAtos.FK_tblWRIReal_Id
    WHERE   ( TReal.FK_tblWRILivro_Id = 15 )


    Wesley Neves


    • Editado Wesley Neves quinta-feira, 20 de outubro de 2016 15:58 Erro
    • Marcado como Resposta Ana Paula Rocha quinta-feira, 20 de outubro de 2016 16:26
    quinta-feira, 20 de outubro de 2016 15:58