none
SQL - Mostrar data atual e data anterior (D-1) na mesma coluna RRS feed

  • Pergunta

  • Pessoal boa noite,

    No SQL Server estou tentando mostrar na mesma coluna a data atual e a data anterior sendo d-1

    Porém eu não estou conseguindo juntar as duas datas para aparecer num mesmo relatorio, na mesma coluna mas em linhas. 

    Podem dar um help?

    Segue pedaço do codigo. 

    DECLARE @Hoje       DATE
    Declare @Hoje1 DATE
    Declare @DataInicio DATE
    Declare @DataFim    DATE

    SET @Hoje = DATEADD (DD,0,GETDATE())
    SET @Hoje1 = DATEADD (DD,-1,GETDATE())

    DECLARE @CriterioArquivo AS TABLE (Id             INT IDENTITY(1,1),
                                       GrupoQuery     INT,
                                       PrefixoArquivo VARCHAR(255),
                                       TipoArquivo    CHAR(2),
                                       QtdeDRT        INT,
                                       DataInicio     DATE,
                                       DataFim        DATE)

    SELECT @DataInicio = MIN(dtt_data_captura),
           @DataFim    = MAX(dtt_data_captura)
      FROM (
      SELECT MAX([dtt_data_captura]) AS dtt_data_captura
        FROM [tb_arquivo_processado]
       WHERE [fk_int_status] in ('2', '4')
         AND [vch_nome_arquivo] like 'Abhi_RT_Ext.1_%'
    ) X


    INSERT INTO @CriterioArquivo VALUES 
    (1, 'Abhi_RT_JJ_14_%',               'RT', 5, @Hoje,       GETDATE()),
    (2, 'Abhi_RT_G3_30_%',               'RT', 5, @Hoje,       GETDATE()),
    (3, 'Abhi_RT_OC_30_%',               'RT', 5, @Hoje,       GETDATE()),
    (2, 'Abhi_RT_Ext.1_%',               'RT', 5, @DataInicio, @DataFim),
    (2, '%G3_OW_BUSCA_HORA_%',           'OW', 5, @Hoje,       GETDATE()),
    (2, '%G3_OW_ATM_CKS%',               'OW', 5, @Hoje,       GETDATE()),
    (2, '%G3_OW_Super_Compet_Business%', 'OW', 5, @Hoje,       GETDATE()),
    (1, '%JJ_OW_Super_Competitive%',     'OW', 5, @Hoje,       GETDATE()),
    (4, '%AZUL_RT_AD_30_%',              'RT', 5, @Hoje,       GETDATE()),
    (4, '%AZUL_RT_AD_Ext.1_%',           'RT', 5, @Hoje,       GETDATE()),
    (3, '%Abhi_RT_OC_7_',                'RT', 5, @Hoje,       GETDATE()),
    (1, '%Abhi_RT_JJ_7_%',               'RT', 5, @Hoje,       GETDATE()),
    (1, '%JJ_OW_VOLTA%',                 'OW',   5, @Hoje,       GETDATE()),
    (2, '%G3_OW_VOLTA%',                 'OW',   5, @Hoje,       GETDATE()),
    (1, '%Abhi_RT_JJ_Ext.1_%',           'RT', 5, @Hoje,       GETDATE())

    BEGIN TRY DROP TABLE #PreCriterioArquivo END TRY BEGIN CATCH END CATCH
    SELECT CA.Id, CA.GrupoQuery, AP.vch_nome_arquivo, CA.TipoArquivo, CA.QtdeDRT, CA.DataInicio, CA.DataFim, AP.[pk_int_arquivo_processado]
      INTO #PreCriterioArquivo
      FROM @CriterioArquivo CA
           INNER JOIN [QL2].[dbo].[tb_arquivo_processado] AP ON AP.dtt_data_captura >=   DataInicio AND
                                                                AP.dtt_data_captura <=   DataFim AND
                                                                AP.vch_nome_arquivo LIKE CA.PrefixoArquivo AND
                                                                AP.fk_int_status    IN   (2, 4)

    Preciso que a consulta traga dados da data atual e da data do dia anteior, ou até 3 dias atrás.  

    Em linhas

    Exemplo

    Col 1  Col 2   Data

    AA      1       16/02/2017    Atual 

    BB      2       16/02/2017    Atual

    CC      3       16/02/2017    Atual

    AA      1       15/02/2017     D-1

    BB      2       15/02/2017     D-1

    CC      3       15/02/2017     D-1

    Muito obrigada


    quarta-feira, 15 de fevereiro de 2017 20:18

Respostas

  • Deleted
    • Marcado como Resposta Thaís Sakamoto segunda-feira, 20 de fevereiro de 2017 17:57
    quinta-feira, 16 de fevereiro de 2017 18:07
  • Boa noite,

    Thaís, pelo teste rápido que fiz com o script abaixo acredito que deveria funcionar.

    Experimente fazer uns testes:

    declare @tb_arquivo_processado table
    (
        pk_int_arquivo_processado int identity(1, 1), 
        vch_nome_arquivo varchar(255),
        dtt_data_captura date,
        fk_int_status int
    );
    
    insert into @tb_arquivo_processado (vch_nome_arquivo, dtt_data_captura, fk_int_status) 
    values
    ('Abhi_RT_JJ_14_ABC', '20170216', 2),
    ('Abhi_RT_JJ_14_DEF', '20170215', 4);
    
    DECLARE @Hoje       DATE
    Declare @Ontem DATE
    Declare @DataInicio DATE
    Declare @DataFim    DATE
    
    SET @Hoje = DATEADD (DD,0,GETDATE())
    SET @Ontem = DATEADD (DD,-1,GETDATE())
    
    DECLARE @CriterioArquivo AS TABLE (Id             INT IDENTITY(1,1),
                                       GrupoQuery     INT,
                                       PrefixoArquivo VARCHAR(255),
                                       TipoArquivo    CHAR(2),
                                       QtdeDRT        INT,
                                       DataInicio     DATE,
                                       DataFim        DATE)
    
    SELECT @DataInicio = MIN(dtt_data_captura),
           @DataFim    = MAX(dtt_data_captura)
      FROM @tb_arquivo_processado
      WHERE [fk_int_status] in ('2', '4')
             AND [vch_nome_arquivo] like 'Abhi_RT_Ext.1_%';
    
    INSERT INTO @CriterioArquivo(GrupoQuery, PrefixoArquivo, TipoArquivo, 
                                  QtdeDRT, DataInicio, DataFim)  VALUES 
    (1, 'Abhi_RT_JJ_14_%',               'RT', 5, @Ontem, @Hoje),
    (2, 'Abhi_RT_G3_30_%',               'RT', 5, @Ontem, @Hoje),
    (3, 'Abhi_RT_OC_30_%',               'RT', 5, @Ontem, @Hoje),
    (2, 'Abhi_RT_Ext.1_%',               'RT', 5, @DataInicio, @DataFim),
    (2, '%G3_OW_BUSCA_HORA_%',           'OW', 5, @Ontem, @Hoje),
    (2, '%G3_OW_ATM_CKS%',               'OW', 5, @Ontem, @Hoje),
    (2, '%G3_OW_Super_Compet_Business%', 'OW', 5, @Ontem, @Hoje),
    (1, '%JJ_OW_Super_Competitive%',     'OW', 5, @Ontem, @Hoje),
    (4, '%AZUL_RT_AD_30_%',              'RT', 5, @Ontem, @Hoje),
    (4, '%AZUL_RT_AD_Ext.1_%',           'RT', 5, @Ontem, @Hoje),
    (3, '%Abhi_RT_OC_7_',                'RT', 5, @Ontem, @Hoje),
    (1, '%Abhi_RT_JJ_7_%',               'RT', 5, @Ontem, @Hoje),
    (1, '%JJ_OW_VOLTA%',                 'OW',   5, @Ontem, @Hoje),
    (2, '%G3_OW_VOLTA%',                 'OW',   5, @Ontem, @Hoje),
    (1, '%Abhi_RT_JJ_Ext.1_%',           'RT', 5, @Ontem, @Hoje)
    
    SELECT CA.Id, CA.GrupoQuery, AP.vch_nome_arquivo, AP.dtt_data_captura, CA.TipoArquivo, CA.QtdeDRT, CA.DataInicio, CA.DataFim, AP.[pk_int_arquivo_processado]
      -- INTO #PreCriterioArquivo
             FROM @CriterioArquivo CA
           INNER JOIN @tb_arquivo_processado AP on AP.vch_nome_arquivo LIKE CA.PrefixoArquivo
    where AP.dtt_data_captura between CA.DataInicio and CA.DataFim 
          AND AP.fk_int_status    IN   (2, 4);

    Espero que ajude


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

    • Marcado como Resposta Thaís Sakamoto segunda-feira, 20 de fevereiro de 2017 17:57
    quinta-feira, 16 de fevereiro de 2017 22:30
  • Deleted
    sexta-feira, 17 de fevereiro de 2017 10:52
  • Meus caros,

    Consegui solucionar o problema finalmente

    Eu agradeço muito a ajuda de todos

    Criei um insert para cada

    INSERT INTO @CriterioArquivo VALUES 
    (1, 'Abhi_RT_JJ_14_%',               'RT', 5, @Ontem,       GETDATE()),

    (1, 'Abhi_RT_JJ_14_%',               'RT', 5, @Hoje,       GETDATE())

    Obrigada

    • Marcado como Resposta Thaís Sakamoto quarta-feira, 22 de fevereiro de 2017 17:28
    quarta-feira, 22 de fevereiro de 2017 17:28

Todas as Respostas

  • Olá! Você pode concatenar as duas datas para ficarem na mesma coluna, segue exemplo:

    DECLARE @Hoje DATETIME
    DECLARE @Ontem DATETIME
    
    SET @Hoje = GETDATE()
    SET @Ontem = DATEADD(DAY, -1, @Hoje)
    
    SELECT REPLACE(CONVERT(NVARCHAR, @Ontem, 106), ' ', '/')
    + ' - ' + REPLACE(CONVERT(NVARCHAR, @Hoje, 106), ' ', '/')


    João Paulo Gomes


    • Editado John Owl quarta-feira, 15 de fevereiro de 2017 20:58
    quarta-feira, 15 de fevereiro de 2017 20:57
  • Pessoal boa noite,

    No SQL Server estou tentando mostrar na mesma coluna a data atual e a data anterior sendo d-1

    Porém eu não estou conseguindo juntar as duas datas para aparecer num mesmo relatorio, na mesma coluna.

    De forma simples e objetiva vc pode usar a função CONCAT

    seque o Exemplo:

    DECLARE @Hoje       DATE
    Declare @Ontem DATE
    Declare @DataInicio DATE
    Declare @Campo  VARCHAR(30)

    SET @Hoje = DATEADD (DD,0,GETDATE())
    SELECT @Hoje

    SET @Ontem = DATEADD (DD,-1,GETDATE())
    SELECT @Ontem


    SET @Campo =CONCAT(@Ontem,' - ',@Hoje);

    SELECT @Campo

       


    Por favor,  marque-o como respondidas se está respondeu a sua pergunta 
    ou marcá-lo como útil se está ajudou a resolver o seu problema 
    Wesley Neves
    MTA-Database Fundamentals 
    Analista Desenvolvedor.NET



    • Editado Wesley Neves quinta-feira, 16 de fevereiro de 2017 10:43 Correção
    quinta-feira, 16 de fevereiro de 2017 10:42
  • Acho que não me expressei direito.

    Preciso que a consulta traga dados da data atual e da data do dia anteior, ou até 3 dias atrás.  

    Em linhas

    Exemplo

    Col 1  Col 2   Data

    AA      1       16/02/2017    Atual 

    BB      2       16/02/2017    Atual

    CC      3       16/02/2017    Atual

    AA      1       15/02/2017     D-1

    BB      2       15/02/2017     D-1

    CC      3       15/02/2017     D-1

    Muito obrigada

    quinta-feira, 16 de fevereiro de 2017 13:53
  • Boa tarde,

    Thaís, experimente utilizar as variáveis @Hoje1 e @Hoje no Insert para ver se é obtido o resultado esperado. Ex:

    INSERT INTO @CriterioArquivo VALUES 
    (1, 'Abhi_RT_JJ_14_%',               'RT', 5, @Hoje1,       @Hoje)

    Espero que ajude


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

    quinta-feira, 16 de fevereiro de 2017 14:16
  • Ola boa tarde

    Já tentei e apresenta o erro 

    Msg 8101, Level 16, State 1, Line 2
    An explicit value for the identity column in table can only be specified when a column list is used and IDENTITY_INSERT is ON.

    quinta-feira, 16 de fevereiro de 2017 14:39
  • Tente assim:

    INSERT INTO @CriterioArquivo VALUES 
    ('Abhi_RT_JJ_14_%',               'RT', 5, @Hoje1,       @Hoje)


    João Paulo Gomes

    quinta-feira, 16 de fevereiro de 2017 16:41
  • apresenta o erro novamente

    Msg 8101, Level 16, State 1, Line 2
    An explicit value for the identity column in table can only be specified when a column list is used and IDENTITY_INSERT is ON.


    quinta-feira, 16 de fevereiro de 2017 16:58
  • Olá José 

    Agradeço muito sua ajuda 

    Segui as modificações. Porem minha consulta ainda resulta somente dados da data atual. 

    BEGIN TRY DROP TABLE #PreCriterioArquivo END TRY BEGIN CATCH END CATCH
    SELECT CA.Id, CA.GrupoQuery, AP.vch_nome_arquivo, CA.TipoArquivo, CA.QtdeDRT, CA.DataInicio, CA.DataFim, AP.[pk_int_arquivo_processado]
      INTO #PreCriterioArquivo
             FROM @CriterioArquivo CA
           INNER JOIN [QL2].[dbo].[tb_arquivo_processado] AP on AP.vch_nome_arquivo LIKE CA.PrefixoArquivo
    where AP.dtt_data_captura between CA.DataInicio and CA.DataFim 
          AND AP.fk_int_status    IN   (2, 4);

    DECLARE @Hoje       DATE
    Declare @Ontem DATE
    Declare @DataInicio DATE
    Declare @DataFim    DATE

    Declare @Tipo int
    Declare @Valor decimal(5,2)

    Set @Tipo = 1
    Set @Valor = 20.00

    SET @Hoje = DATEADD (DD,0,GETDATE())
    SET @Ontem = DATEADD (DD,-1,GETDATE())

    DECLARE @CriterioArquivo AS TABLE (Id             INT IDENTITY(1,1),
                                       GrupoQuery     INT,
                                       PrefixoArquivo VARCHAR(255),
                                       TipoArquivo    CHAR(2),
                                       QtdeDRT        INT,
                                       DataInicio     DATE,
                                       DataFim        DATE)

    SELECT @DataInicio = MIN(dtt_data_captura),
           @DataFim    = MAX(dtt_data_captura)
      FROM [tb_arquivo_processado]
      WHERE [fk_int_status] in ('2', '4')
             AND [vch_nome_arquivo] like 'Abhi_RT_Ext.1_%';

    INSERT INTO @CriterioArquivo(GrupoQuery, PrefixoArquivo, TipoArquivo, 
                                  QtdeDRT, DataInicio, DataFim)  VALUES 
    (1, 'Abhi_RT_JJ_14_%',               'RT', 5, @Ontem, @Hoje),
    (2, 'Abhi_RT_G3_30_%',               'RT', 5, @Ontem, @Hoje),
    (3, 'Abhi_RT_OC_30_%',               'RT', 5, @Ontem, @Hoje),
    (2, 'Abhi_RT_Ext.1_%',               'RT', 5, @DataInicio, @DataFim),
    (2, '%G3_OW_BUSCA_HORA_%',           'OW', 5, @Ontem, @Hoje),
    (2, '%G3_OW_ATM_CKS%',               'OW', 5, @Ontem, @Hoje),
    (2, '%G3_OW_Super_Compet_Business%', 'OW', 5, @Ontem, @Hoje),
    (1, '%JJ_OW_Super_Competitive%',     'OW', 5, @Ontem, @Hoje),
    (4, '%AZUL_RT_AD_30_%',              'RT', 5, @Ontem, @Hoje),
    (4, '%AZUL_RT_AD_Ext.1_%',           'RT', 5, @Ontem, @Hoje),
    (3, '%Abhi_RT_OC_7_',                'RT', 5, @Ontem, @Hoje),
    (1, '%Abhi_RT_JJ_7_%',               'RT', 5, @Ontem, @Hoje),
    (1, '%JJ_OW_VOLTA%',                 'OW',   5, @Ontem, @Hoje),
    (2, '%G3_OW_VOLTA%',                 'OW',   5, @Ontem, @Hoje),
    (1, '%Abhi_RT_JJ_Ext.1_%',           'RT', 5, @Ontem, @Hoje)

    Obrigada

    quinta-feira, 16 de fevereiro de 2017 19:58
  • Boa noite,

    Thaís, pelo teste rápido que fiz com o script abaixo acredito que deveria funcionar.

    Experimente fazer uns testes:

    declare @tb_arquivo_processado table
    (
        pk_int_arquivo_processado int identity(1, 1), 
        vch_nome_arquivo varchar(255),
        dtt_data_captura date,
        fk_int_status int
    );
    
    insert into @tb_arquivo_processado (vch_nome_arquivo, dtt_data_captura, fk_int_status) 
    values
    ('Abhi_RT_JJ_14_ABC', '20170216', 2),
    ('Abhi_RT_JJ_14_DEF', '20170215', 4);
    
    DECLARE @Hoje       DATE
    Declare @Ontem DATE
    Declare @DataInicio DATE
    Declare @DataFim    DATE
    
    SET @Hoje = DATEADD (DD,0,GETDATE())
    SET @Ontem = DATEADD (DD,-1,GETDATE())
    
    DECLARE @CriterioArquivo AS TABLE (Id             INT IDENTITY(1,1),
                                       GrupoQuery     INT,
                                       PrefixoArquivo VARCHAR(255),
                                       TipoArquivo    CHAR(2),
                                       QtdeDRT        INT,
                                       DataInicio     DATE,
                                       DataFim        DATE)
    
    SELECT @DataInicio = MIN(dtt_data_captura),
           @DataFim    = MAX(dtt_data_captura)
      FROM @tb_arquivo_processado
      WHERE [fk_int_status] in ('2', '4')
             AND [vch_nome_arquivo] like 'Abhi_RT_Ext.1_%';
    
    INSERT INTO @CriterioArquivo(GrupoQuery, PrefixoArquivo, TipoArquivo, 
                                  QtdeDRT, DataInicio, DataFim)  VALUES 
    (1, 'Abhi_RT_JJ_14_%',               'RT', 5, @Ontem, @Hoje),
    (2, 'Abhi_RT_G3_30_%',               'RT', 5, @Ontem, @Hoje),
    (3, 'Abhi_RT_OC_30_%',               'RT', 5, @Ontem, @Hoje),
    (2, 'Abhi_RT_Ext.1_%',               'RT', 5, @DataInicio, @DataFim),
    (2, '%G3_OW_BUSCA_HORA_%',           'OW', 5, @Ontem, @Hoje),
    (2, '%G3_OW_ATM_CKS%',               'OW', 5, @Ontem, @Hoje),
    (2, '%G3_OW_Super_Compet_Business%', 'OW', 5, @Ontem, @Hoje),
    (1, '%JJ_OW_Super_Competitive%',     'OW', 5, @Ontem, @Hoje),
    (4, '%AZUL_RT_AD_30_%',              'RT', 5, @Ontem, @Hoje),
    (4, '%AZUL_RT_AD_Ext.1_%',           'RT', 5, @Ontem, @Hoje),
    (3, '%Abhi_RT_OC_7_',                'RT', 5, @Ontem, @Hoje),
    (1, '%Abhi_RT_JJ_7_%',               'RT', 5, @Ontem, @Hoje),
    (1, '%JJ_OW_VOLTA%',                 'OW',   5, @Ontem, @Hoje),
    (2, '%G3_OW_VOLTA%',                 'OW',   5, @Ontem, @Hoje),
    (1, '%Abhi_RT_JJ_Ext.1_%',           'RT', 5, @Ontem, @Hoje)
    
    SELECT CA.Id, CA.GrupoQuery, AP.vch_nome_arquivo, AP.dtt_data_captura, CA.TipoArquivo, CA.QtdeDRT, CA.DataInicio, CA.DataFim, AP.[pk_int_arquivo_processado]
      -- INTO #PreCriterioArquivo
             FROM @CriterioArquivo CA
           INNER JOIN @tb_arquivo_processado AP on AP.vch_nome_arquivo LIKE CA.PrefixoArquivo
    where AP.dtt_data_captura between CA.DataInicio and CA.DataFim 
          AND AP.fk_int_status    IN   (2, 4);

    Espero que ajude


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

    • Marcado como Resposta Thaís Sakamoto segunda-feira, 20 de fevereiro de 2017 17:57
    quinta-feira, 16 de fevereiro de 2017 22:30
  • Bom dia Thaís,

    Conseguiu resolver o problema?

    Atenciosamente,


    Robson William Silva

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

    MSDN Community Support

    Por favor, lembre-se de Marcar como Resposta as postagens que resolveram o seu problema. Essa é 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.

    segunda-feira, 20 de fevereiro de 2017 12:48
  • Boa tarde,

    No script que sugeri acima, basicamente só troquei a tabela do BD por uma variável de tabela para facilitar os testes.

    Não sei se você chegou a executar o script, mas se executar (adaptando as datas utilizadas no Insert na variável de tabela) perceberá que o script vai retornar as linhas com o dia atual e com o dia anterior.

    Caso você não consiga identificar o problema, acho que seria melhor você postar alguns Inserts na variável de tabela com outros dados, bem como devidos ajustes na variável de tabela para que fique semelhante a sua tabela no BD para demonstrar o problema que está ocorrendo.


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

    segunda-feira, 20 de fevereiro de 2017 17:15
  • Meus caros,

    Consegui solucionar o problema finalmente

    Eu agradeço muito a ajuda de todos

    Criei um insert para cada

    INSERT INTO @CriterioArquivo VALUES 
    (1, 'Abhi_RT_JJ_14_%',               'RT', 5, @Ontem,       GETDATE()),

    (1, 'Abhi_RT_JJ_14_%',               'RT', 5, @Hoje,       GETDATE())

    Obrigada

    • Marcado como Resposta Thaís Sakamoto quarta-feira, 22 de fevereiro de 2017 17:28
    quarta-feira, 22 de fevereiro de 2017 17:28