none
Como agrupar resultados de uma consulta por quinzena? RRS feed

  • Pergunta

  • Olá pessoal, gostaria de saber como eu faço para agrupar uma view por quinzena. O resultado que eu pretendo é bem parecido com aqueles que tiramos com a ferramenta de Tabela dinâmica do Excel.

    Se existir a probabilidade de a instrução ficar da maneira com que está abaixo quebraria muito o galho.

    Ex.:

    Acessos         Período

    123               01/01/2010 à 15/01/2010

    123               16/01/2010 à 30/01/2010

    e assim vai...

     

    Bom trabalho a todos.

    quinta-feira, 9 de setembro de 2010 20:09

Respostas

  • Euxo, use o calculo FLOOR(LOG(Datepart(day, data_medicao))/LOG(15)), ele vai retornar 0 para a primeira quinzena e 1 para a segunda, e da mesma forma, coloca ele no Group by:

    Group by FLOOR(LOG(Datepart(day, data_medicao))/LOG(15))


    Tks. Fausto Fiorese Branco MCTS, MCITP/DBA 2005 | MCITP/DBA 2008 São Paulo - Brasil * http://www.linkedin.com/in/faustobranco
    • Marcado como Resposta EuxoMenino sexta-feira, 10 de setembro de 2010 11:38
    quinta-feira, 9 de setembro de 2010 20:24

Todas as Respostas

  • Euxo, use o calculo FLOOR(LOG(Datepart(day, data_medicao))/LOG(15)), ele vai retornar 0 para a primeira quinzena e 1 para a segunda, e da mesma forma, coloca ele no Group by:

    Group by FLOOR(LOG(Datepart(day, data_medicao))/LOG(15))


    Tks. Fausto Fiorese Branco MCTS, MCITP/DBA 2005 | MCITP/DBA 2008 São Paulo - Brasil * http://www.linkedin.com/in/faustobranco
    • Marcado como Resposta EuxoMenino sexta-feira, 10 de setembro de 2010 11:38
    quinta-feira, 9 de setembro de 2010 20:24
  • Vlw garoto era isso mesmo!!!

    Pra quem quiser conferir o resultado ou ficou com alguma dúvida de como construir segue um modelo básico de instrução sql

    Select count(A.cod_acesso) as totalacessos, FLOOR(LOG(Datepart(day, A.dataacesso))/LOG(16)) as quinzena, A.campanha, B.nomecampanha from [tbl_acessoafiliados] as A Inner Join tbl_afiliadocampanha AS B On A.campanha = B.idcampanha where A.afiliado = '"&afiliado&"' and Datepart(month, A.dataacesso) = 9 and Datepart(year, A.dataacesso) = 2010 Group by A.campanha, B.nomecampanha, FLOOR(LOG(Datepart(day, A.dataacesso))/LOG(16))

    Apenas fiz uma alteração, de Log(15) para Log(16). O motivo foi que eu queria que fosse feito uma divisão de datas entre 1 ao dia 15 (ficando com log15 ele estava mostrando resultados até o dia 14)

     

    • Sugerido como Resposta Fabiano MALMO sábado, 24 de março de 2012 02:16
    sexta-feira, 10 de setembro de 2010 18:28
  • Como esta é uma dúvida comum e recorrente, quero registrar que eu me baseei na solução aqui proposta, mas não estou usando a função LOG(). Meus resultados são os mesmos e com menos overhead nos cálculos. Ou seja, estou usando:

    FLOOR( DATEPART(DAY, <CAMPO_DATA>) / 16).

    Antes de abdicar da função LOG valide se seus resultados serão igualmente confiáveis. Uma melhoria de desempenho é sempre bem vinda.


    Alexandre Paiva, MCT

    sexta-feira, 6 de dezembro de 2019 11:58