none
Consulta por dia RRS feed

  • Pergunta

  • Bom dia,

    Gostaria de uma auxílio dos amigos.
    Preciso realizar uma pesquisa que conta o total de funcionários ativos por dia em um determinado período.
    Tenho, por exemplo,  a seguinte pesquisa:

    select count(*) from funcionarios where datademissao > '01/06/2017'

    O que preciso é realizar a pesquisa de alguma forma em que eu coloque o período desejado e me traga um total por dia. 

    Desde já agradeço a ajuda de todos.
    terça-feira, 18 de julho de 2017 14:13

Respostas

  • Veja se isso atende.

    declare @data date = '01/06/2017'

    select count(1) as quantidade from funcionarios where @data between admissao and getdate() and  (datademissao is null or @data < datademissao) 


    <hr> <b>Vinicius Fonseca</b><br/> MCP | MCTS | MCDBA | MCITP | MCTS | MCT | ITIL Foundation<br/> <b><a href="http://www.dgasistemas.com.br">DGA SISTEMAS </a></b>

    terça-feira, 18 de julho de 2017 20:06
  • Boa tarde,

    Daniel, experimente fazer uns testes mais ou menos dessa forma:

    declare @DataIni date;
    declare @DataFim date;
    set @DataIni = '20170701';
    set @DataFim = '20170715';
    
    with CTE_Datas as
    (
        select @DataIni as Data
    
        union all
    
        select dateadd(day, 1, Data)
        from CTE_Datas
        where Data < @DataFim
    )
    
    
    select
        d.Data,
        (select count(*) from Funcionarios as f
         where 
             f.DataAdmissao <= d.Data and
             (f.DataDemissao > d.Data or f.DataDemissao is null)) as QtdeAtivos
    from CTE_Datas as d
    

    Espero que ajude


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

    terça-feira, 18 de julho de 2017 20:52

Todas as Respostas

  • Bom dia.

    Veja se isso atende.

    declare @dataini date = '01/06/2017', @datafim date = '30/06/2017'

    select datademissao, count(1) as quantidade from funcionarios where datademissao >= @dataini and datademissao < dateadd(dd,1,@datafim) group by datademissao order by datademissao

    Abs



    Vinicius Fonseca
    MCP | MCTS | MCDBA | MCITP | MCTS | MCT | ITIL Foundation
    CBD CONSULTORIA

    terça-feira, 18 de julho de 2017 14:22
  • Boa tarde Vinícius,

    É quase isto, só que na verdade eu precisa saber a quantidade de ativos no dia, não a quantidade de demitidos.

    De qualquer forma, muito obrigado pelo auxílio.

    terça-feira, 18 de julho de 2017 18:20
  • Daniel,

    há algum campo de status? Como vc identifica que o usuário está ativo? Pode postar a estrutura da sua tabela?



    Vinicius Fonseca
    MCP | MCTS | MCDBA | MCITP | MCTS | MCT | ITIL Foundation
    CBD CONSULTORIA

    terça-feira, 18 de julho de 2017 18:22
  • Oi Vinicius,

    Na verdade é uma tabela bem simples, tem 5 campos: matricula, nome, status, dataadmissao, datademissao.

    O Status é indiferente, eu verifico se estava ativo na data pela data de admissão e demissão. Verifico se na data pesquisada ele já havia sido contratado pela dataadmissao e se a data de demissão esta nula ou com data menor que a pesquisada.

    ABS

    terça-feira, 18 de julho de 2017 19:56
  • Veja se isso atende.

    declare @data date = '01/06/2017'

    select count(1) as quantidade from funcionarios where @data between admissao and getdate() and  (datademissao is null or @data < datademissao) 


    <hr> <b>Vinicius Fonseca</b><br/> MCP | MCTS | MCDBA | MCITP | MCTS | MCT | ITIL Foundation<br/> <b><a href="http://www.dgasistemas.com.br">DGA SISTEMAS </a></b>

    terça-feira, 18 de julho de 2017 20:06
  • Boa tarde,

    Daniel, experimente fazer uns testes mais ou menos dessa forma:

    declare @DataIni date;
    declare @DataFim date;
    set @DataIni = '20170701';
    set @DataFim = '20170715';
    
    with CTE_Datas as
    (
        select @DataIni as Data
    
        union all
    
        select dateadd(day, 1, Data)
        from CTE_Datas
        where Data < @DataFim
    )
    
    
    select
        d.Data,
        (select count(*) from Funcionarios as f
         where 
             f.DataAdmissao <= d.Data and
             (f.DataDemissao > d.Data or f.DataDemissao is null)) as QtdeAtivos
    from CTE_Datas as d
    

    Espero que ajude


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

    terça-feira, 18 de julho de 2017 20:52
  • Bom dia Vinícius, tudo bem!?!?

    Muitíssimo obrigado por teu auxílio, em cima da tuas dicas consegui construir a extração exatamente como eu desejava.

    Mais uma vez, muito obrigado!!!

    Um forte abraço,


    sexta-feira, 21 de julho de 2017 12:13
  • Muito obrigado Gapimex, na verdade utilizei esta lógica, embora o Vinícius tenha me dado um grande auxílio também!

    Muito obrigado!

    sexta-feira, 21 de julho de 2017 12:15