Array
(
)

Agrupar por data

Joao Gorgonha
   - 05 nov 2012

Bom dia senhores, estou precisando montar uma consulta onde me traga as datas e quantas batidas (acesso ao refeitório) tive.
Porem a tabela esta em datetime, e esta agrupanto por minuto.
Segue abaixo minha consulta, se alguem puder ajudar agradeço:
#Código

select l.mov_datahora, count(l.mov_datahora) from log_credencial l JOIN pessoas p
ON l.pes_numero = p.pes_numero
where l.mov_datahora between '20121001' and '20121015'
and l.mov_datahora - CAST(FLOOR(CAST(l.mov_datahora AS float)) AS datetime) > '10:30'
AND l.mov_datahora - CAST(FLOOR(CAST(l.mov_datahora AS float)) AS datetime) < '14:00'
and l.eqpi_numero = 2
group by l.mov_datahora
order by l.mov_datahora

Claudiadnh
   - 05 nov 2012

Tentou assim:

#Código

select CAST(FLOOR(CAST(l.mov_datahora AS float)) AS datetime) AS mov_datahora, count(l.mov_datahora) from log_credencial l JOIN pessoas p
ON l.pes_numero = p.pes_numero
where l.mov_datahora between '20121001' and '20121015'
and l.mov_datahora - CAST(FLOOR(CAST(l.mov_datahora AS float)) AS datetime) > '10:30'
AND l.mov_datahora - CAST(FLOOR(CAST(l.mov_datahora AS float)) AS datetime) < '14:00'
and l.eqpi_numero = 2
group by 1
order by 1

Joao Gorgonha
   - 05 nov 2012

Infelizmente nao resolveu, a consulta esta vindo assim?

#Código

01/10/2012 00:00:00	1
01/10/2012 00:00:00	5
01/10/2012 00:00:00	7
01/10/2012 00:00:00	4
01/10/2012 00:00:00	1
01/10/2012 00:00:00	4
01/10/2012 00:00:00	2
01/10/2012 00:00:00	1

Claudiadnh
   - 05 nov 2012

Faltou colocar o mesmo código no count.
Tenta assim:

#Código

select CAST(FLOOR(CAST(l.mov_datahora AS float)) AS datetime) AS mov_datahora, count(CAST(FLOOR(CAST(l.mov_datahora AS float)) AS datetime)) from log_credencial l JOIN pessoas p
ON l.pes_numero = p.pes_numero
where l.mov_datahora between '20121001' and '20121015'
and l.mov_datahora - CAST(FLOOR(CAST(l.mov_datahora AS float)) AS datetime) > '10:30'
AND l.mov_datahora - CAST(FLOOR(CAST(l.mov_datahora AS float)) AS datetime) < '14:00'
and l.eqpi_numero = 2
group by 1
order by 1

Claudiadnh
   - 05 nov 2012

Faltou colocar o mesmo código no count.
Tenta assim:

#Código

select CAST(FLOOR(CAST(l.mov_datahora AS float)) AS datetime) AS mov_datahora, count(CAST(FLOOR(CAST(l.mov_datahora AS float)) AS datetime)) from log_credencial l JOIN pessoas p
ON l.pes_numero = p.pes_numero
where l.mov_datahora between '20121001' and '20121015'
and l.mov_datahora - CAST(FLOOR(CAST(l.mov_datahora AS float)) AS datetime) > '10:30'
AND l.mov_datahora - CAST(FLOOR(CAST(l.mov_datahora AS float)) AS datetime) < '14:00'
and l.eqpi_numero = 2
group by 1
order by 1

Joao Gorgonha
   - 05 nov 2012

Boa Claudia,
Na verdade faltou por a instruçao no Group By, ficou assim:
#Código

select CAST(FLOOR(CAST(mov_datahora AS float)) AS datetime) AS mov_datahora, count(mov_datahora) from log_credencial
where mov_datahora between '20121001' and '20121015'
and mov_datahora - CAST(FLOOR(CAST(mov_datahora AS float)) AS datetime) > '10:30'
AND mov_datahora - CAST(FLOOR(CAST(mov_datahora AS float)) AS datetime) < '14:00'
and eqpi_numero = 2
group by CAST(FLOOR(CAST(mov_datahora AS float)) AS datetime)
order by mov_datahora


Muito obrigado.

Claudiadnh
   - 05 nov 2012

No SQL que eu te mandei tinha isso: group by 1.
Quando você usa o número do campo ele já pega automaticamente o que estava na sentença SQL, por isso não coloquei no group nem no order.
Dá no mesmo.

Citação:
Boa Claudia,
Na verdade faltou por a instruçao no Group By, ficou assim:
#Código

select CAST(FLOOR(CAST(mov_datahora AS float)) AS datetime) AS mov_datahora, count(mov_datahora) from log_credencial
where mov_datahora between '20121001' and '20121015'
and mov_datahora - CAST(FLOOR(CAST(mov_datahora AS float)) AS datetime) > '10:30'
AND mov_datahora - CAST(FLOOR(CAST(mov_datahora AS float)) AS datetime) < '14:00'
and eqpi_numero = 2
group by CAST(FLOOR(CAST(mov_datahora AS float)) AS datetime)
order by mov_datahora


Muito obrigado.