none
ajuda em um sql com periodo RRS feed

  • Pergunta

  • Boa tarde,

    o meu problema é o seguinte:

    preciso da quantidade de vezes que aparece um registro dentro de um periodo informado

    segue um exemplo para esclarecer:

    select cod_a, nome, sobrenome
    
      from tabela_c
    
      where data between @data_inicial and @data_final
    

    já tentei com o count.. mas nao estou sabendo usá-lo...

    obrigado

    quarta-feira, 9 de abril de 2014 19:13

Respostas

  • Deleted
    • Sugerido como Resposta Giovani Cr sexta-feira, 11 de abril de 2014 19:28
    • Marcado como Resposta Giovani Cr terça-feira, 15 de abril de 2014 13:56
    quinta-feira, 10 de abril de 2014 09:55
  • é assim...

    tenho estes dados (exemplo)

    cod nome data_inicial data_final
    1 jose 01/12/2012 05/12/2012
    2 jose 02/12/2012 06/12/2012
    3 jose 03/12/2012 07/12/2012
    4 fulano 22/12/2012 25/12/2012
    5 fulano 23/12/2012 25/12/2012

    quero que apareça assim

    nome contador
    jose       3
    fulano 2

    o problema é que preciso dessa data_inicial, preciso exibir ela e nao tem como colocar ela no group by pqw ela é diferente.

    eis outro problema.. preciso dessa coluna e por ser diferente nao posso usar no group by... como faço para agrupar dados diferentes? nao tem como né?

    Hawk B,

    Baseado neste resultado, tente executar a consulta abaixo:

    select nome, count(nome) as contador, 
    from tabela_c
    where data between @data_inicial and @data_final
    group by nome

    Se ajudou na sua solução, não esqueça de marcar como resposta !

    Abraços,

    Durval Ramos
    Microsoft Partner | MTA | MCSA - SQL Server 2012
    ----------------------------------
    Se foi resolvido clique "Marcar como resposta" e se foi útil "Votar como Útil"
    • Sugerido como Resposta Giovani Cr sexta-feira, 11 de abril de 2014 19:28
    • Marcado como Resposta Giovani Cr terça-feira, 15 de abril de 2014 13:56
    quinta-feira, 10 de abril de 2014 12:15
    Moderador
  • Hawk B,

    Veja se este exemplo ajuda:

    Create Table Valores
    (Codigo Int Primary Key Identity(1,1),
     Nome Varchar(20),
     DTInicio Date,
     DTFim Date)
    Go
    
    Insert Into Valores Values('jose','2012-12-01','2012-12-05'),
                              ('jose','2012-02-12','2012-12-06'),
    						  ('jose','2012-12-03','2012-12-07'),
    						  ('fulano','2012-12-22','2012-12-25'),
    						  ('fulano','2012-12-23','2012-12-25')
    
    ;With CTE_Contador_Nomes (Nome, Contador)
    As
    (
    Select Nome, Count(Nome) from Valores
    Where DTInicio >='2012-12-02' And DTInicio <= '2012-12-25'
    Group By Nome)
    
    Select CTE.Nome, CTE.Contador, Min(V.DTInicio) DTInicio, Max(V.DTFim) DTFim
    From CTE_Contador_Nomes CTE Inner Join Valores V
                                 On CTE.Nome = V.Nome
    Group By CTE.Nome, CTE.Contador



    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]


    • Editado Junior Galvão - MVPMVP sexta-feira, 11 de abril de 2014 18:26
    • Sugerido como Resposta Giovani Cr sexta-feira, 11 de abril de 2014 19:28
    • Marcado como Resposta Giovani Cr terça-feira, 15 de abril de 2014 13:56
    sexta-feira, 11 de abril de 2014 18:26
  • eu agradeço a resposta de voces pessoal.. mas consegui resolver colocando uma subquery...

    obrigado pessoal

    • Marcado como Resposta Giovani Cr terça-feira, 15 de abril de 2014 13:56
    sábado, 12 de abril de 2014 01:53

Todas as Respostas

  • Boa tarde,

    Experimente dessa forma:

    select cod_a, nome, sobrenome, count(*) as Qtde
    from tabela_c
    where data between @data_inicial and @data_final
    group by cod_a, nome, sobrenome
    

    Espero que ajude.


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

    quarta-feira, 9 de abril de 2014 19:25
  • Hawk_B,

    Tente utilizar a consulta abaixo:

    select count(*) as Qtde
    from tabela_c
    where data between @data_inicial and @data_final

    Se ajudou na sua solução, não esqueça de marcar como resposta !

    Abraços,

    Durval Ramos
    Microsoft Partner | MTA | MCSA - SQL Server 2012
    ----------------------------------
    Se foi resolvido clique "Marcar como resposta" e se foi útil "Votar como Útil"
    quarta-feira, 9 de abril de 2014 19:28
    Moderador
  • entao... ele tá criando uma coluna e colocando 1 para cada linha..

    acontece que tenho registros que preciso contá-los


    • Editado Hawk B quarta-feira, 9 de abril de 2014 19:30
    quarta-feira, 9 de abril de 2014 19:30
  • Hawk, você pode postar um exemplo de como ficou o resultado da query que sugeri e como gostaria que ficasse?

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

    quarta-feira, 9 de abril de 2014 19:42
  • é assim...

    tenho estes dados (exemplo)

    cod nome data_inicial data_final
    1 jose 01/12/2012 05/12/2012
    2 jose 02/12/2012 06/12/2012
    3 jose 03/12/2012 07/12/2012
    4 fulano 22/12/2012 25/12/2012
    5 fulano 23/12/2012 25/12/2012

    quero que apareça assim

    nome contador
    jose       3
    fulano 2

    o problema é que preciso dessa data_inicial, preciso exibir ela e nao tem como colocar ela no group by pqw ela é diferente.

    eis outro problema.. preciso dessa coluna e por ser diferente nao posso usar no group by... como faço para agrupar dados diferentes? nao tem como né?

    • Editado Hawk B quarta-feira, 9 de abril de 2014 20:09
    quarta-feira, 9 de abril de 2014 20:05
  • Experimente remover a coluna cod_a da query:

    select nome, sobrenome, count(*) as Qtde
    from tabela_c
    where data between @data_inicial and @data_final
    group by nome, sobrenome

    Espero que ajude.


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

    quarta-feira, 9 de abril de 2014 20:11
  • entao... é que tenho o problema de linhas repetidas... preciso eliminar elas mas a data é diferente nao consigo agrupar
    quarta-feira, 9 de abril de 2014 20:12
  • Desculpe mas não entendi... não consegui identificar nenhuma linha repetida no exemplo que você postou.

    Acho melhor você postar outro exemplo e o respectivo resultado exatamente como você espera.


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

    quarta-feira, 9 de abril de 2014 20:21
  • tem sim.. o nome "jose" por exemplo... é o mesmo cara

    preciso que se torne apenas um... mas o problema é a data

    quarta-feira, 9 de abril de 2014 20:22
  • Você fez um teste com essa última query que sugeri? Ela não apresentou o resultado esperado? Faltou alguma coisa?

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

    quarta-feira, 9 de abril de 2014 20:29
  • é assim...

    tenho estes dados (exemplo)

    cod nome data_inicial data_final
    1 jose 01/12/2012 05/12/2012
    2 jose 02/12/2012 06/12/2012
    3 jose 03/12/2012 07/12/2012
    4 fulano 22/12/2012 25/12/2012
    5 fulano 23/12/2012 25/12/2012

    quero que apareça assim

    nome contador
    jose       3
    fulano 2

    o problema é que preciso dessa data_inicial, preciso exibir ela e nao tem como colocar ela no group by pqw ela é diferente.

    eis outro problema.. preciso dessa coluna e por ser diferente nao posso usar no group by... como faço para agrupar dados diferentes? nao tem como né?

    Hawk B,

    Baseado neste resultado, tente executar a consulta abaixo:

    select nome, count(nome) as contador, 
    from tabela_c
    where data between @data_inicial and @data_final
    group by nome

    Se ajudou na sua solução, não esqueça de marcar como resposta !

    Abraços,

    Durval Ramos
    Microsoft Partner | MTA | MCSA - SQL Server 2012
    ----------------------------------
    Se foi resolvido clique "Marcar como resposta" e se foi útil "Votar como Útil"
    • Sugerido como Resposta Giovani Cr sexta-feira, 11 de abril de 2014 19:28
    • Marcado como Resposta Giovani Cr terça-feira, 15 de abril de 2014 13:56
    quinta-feira, 10 de abril de 2014 12:15
    Moderador
  • Hawk B,

    Veja se este exemplo ajuda:

    Create Table Valores
    (Codigo Int Primary Key Identity(1,1),
     Nome Varchar(20),
     DTInicio Date,
     DTFim Date)
    Go
    
    Insert Into Valores Values('jose','2012-12-01','2012-12-05'),
                              ('jose','2012-02-12','2012-12-06'),
    						  ('jose','2012-12-03','2012-12-07'),
    						  ('fulano','2012-12-22','2012-12-25'),
    						  ('fulano','2012-12-23','2012-12-25')
    
    ;With CTE_Contador_Nomes (Nome, Contador)
    As
    (
    Select Nome, Count(Nome) from Valores
    Where DTInicio >='2012-12-02' And DTInicio <= '2012-12-25'
    Group By Nome)
    
    Select CTE.Nome, CTE.Contador, Min(V.DTInicio) DTInicio, Max(V.DTFim) DTFim
    From CTE_Contador_Nomes CTE Inner Join Valores V
                                 On CTE.Nome = V.Nome
    Group By CTE.Nome, CTE.Contador



    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]


    • Editado Junior Galvão - MVPMVP sexta-feira, 11 de abril de 2014 18:26
    • Sugerido como Resposta Giovani Cr sexta-feira, 11 de abril de 2014 19:28
    • Marcado como Resposta Giovani Cr terça-feira, 15 de abril de 2014 13:56
    sexta-feira, 11 de abril de 2014 18:26
  • eu agradeço a resposta de voces pessoal.. mas consegui resolver colocando uma subquery...

    obrigado pessoal

    • Marcado como Resposta Giovani Cr terça-feira, 15 de abril de 2014 13:56
    sábado, 12 de abril de 2014 01:53