Agrupar Intervalo de Datas.

13/06/2012

0

Ola Boa tarde!!!

Estou com um problema que a principio achei de seria simples.

Preciso agrupar um intervalo de horario.

Tenho um campo datetime e estou extraindo deste campo o horario, so que preciso que tudo que compreender o horario de 00:00:00 as 09:00:00 sera considerado como primeira hora, ou simplemente o numero um escrever realmente primeira hora.

Nao estou conseguindo fazer nem pensar em como fazer isso.

Essa necessidade se da, devido uma situacao que surgiu aqui na empresa, a diretoria deseja saber qual a movimentacao hora a hora da empresa, e assim tomar medidas para os horarios que maior volume de vendas e menor volume de vendas.

Algue poderia me dar uma forca.

desde ja agradeco.

Abraco.

Alex - Lekao
Alex Lekao

Alex Lekao

Responder

Posts

13/06/2012

Emanoély Gura

Utilizando case vc não consegue resolver?

Algo tipo:

case when hora between hr_inicio and hr_fim then Primeira hora

Ai agrupa depois.. não sei se é esse o caso...
Responder

13/06/2012

Alex Lekao

pior que nao consegui... estava justamente tentando com o case e nao funcionou.

estou tentando agora fazer com cast e convert mas tive que parar para resolver outro problema, mas ja estou retornando.

mas com o case nao consegui, teria que converter aglumas coisa que nao me lembro agora.

mesmo assim muito obrigado pela forca.
Responder

13/06/2012

Emanoély Gura

Ééé.. vc vai ter que usar cast ou datepart até.
Mas se for o caso, cola o código aqui e ajustamos isso.
Trabalho bastantinho com isso, vai que posso ajudar.

Em todo caso, boa sorte!

:)
Responder

14/06/2012

Alex Lekao

eh camarada...

eu tentei usar o date part e nao deu certo, vou colar o codigo que coloquei para vc ver.

algumas coisas eu comentei porque estava fazendo testes... rsrsr

mais uma vez obrigado pela forca.

SELECT
TOP 500
/*CASE
WHEN DATEPART(HH,R.DTHCAD) BETWEEN 00:00:00 AND 09:00:00 THEN 1
WHEN DATEPART(HH,R.DTHCAD) BETWEEN 09:00:01 AND 10:00:00 THEN 2
WHEN DATEPART(HH,R.DTHCAD) BETWEEN 10:00:01 AND 11:00:00 THEN 3
WHEN DATEPART(HH,R.DTHCAD) BETWEEN 11:00:01 AND 12:00:00 THEN 4
WHEN DATEPART(HH,R.DTHCAD) BETWEEN 12:00:01 AND 13:00:00 THEN 5
WHEN DATEPART(HH,R.DTHCAD) BETWEEN 13:00:01 AND 14:00:00 THEN 6
WHEN DATEPART(HH,R.DTHCAD) BETWEEN 14:00:01 AND 15:00:00 THEN 7
WHEN DATEPART(HH,R.DTHCAD) BETWEEN 15:00:01 AND 16:00:00 THEN 8
WHEN DATEPART(HH,R.DTHCAD) BETWEEN 16:00:01 AND 17:00:00 THEN 9
WHEN DATEPART(HH,R.DTHCAD) BETWEEN 17:00:01 AND 18:00:00 THEN 10
WHEN DATEPART(HH,R.DTHCAD) BETWEEN 18:00:01 AND 23:59:59 THEN 11
ELSE 0
END,*/
cast(R.DTHCAD as time),
R.DTHCAD,
--R.NUMREQ,
--R.NUMNOT,
R.TOTGERAL
FROM JACSYSDB.DBO.REQVDA AS R
WHERE (1=1)
AND (R.TIPOREQ = VD)

--group by
--datepart(hh,R.DTHCAD)
--R.NUMREQ,
--R.NUMNOT,
--R.TOTGERAL
Responder

14/06/2012

Alex Lekao

OPA... e ae... olha eu aqui novamente... rssr

entao consegui fazer... o codigo que ficou vou colar abaixo.

a unica coisa que nao entendi o que fiz de errado eh que o agrupamento parece nao estar acontecendo.

SELECT
--TOP 500
CASE
WHEN convert(varchar,R.DTHCAD,8) BETWEEN 00:00:00 AND 09:00:00 THEN 01
WHEN convert(varchar,R.DTHCAD,8) BETWEEN 09:00:01 AND 10:00:00 THEN 02
WHEN convert(varchar,R.DTHCAD,8) BETWEEN 10:00:01 AND 11:00:00 THEN 03
WHEN convert(varchar,R.DTHCAD,8) BETWEEN 11:00:01 AND 12:00:00 THEN 04
WHEN convert(varchar,R.DTHCAD,8) BETWEEN 12:00:01 AND 13:00:00 THEN 05
WHEN convert(varchar,R.DTHCAD,8) BETWEEN 13:00:01 AND 14:00:00 THEN 06
WHEN convert(varchar,R.DTHCAD,8) BETWEEN 14:00:01 AND 15:00:00 THEN 07
WHEN convert(varchar,R.DTHCAD,8) BETWEEN 15:00:01 AND 16:00:00 THEN 08
WHEN convert(varchar,R.DTHCAD,8) BETWEEN 16:00:01 AND 17:00:00 THEN 09
WHEN convert(varchar,R.DTHCAD,8) BETWEEN 17:00:01 AND 18:00:00 THEN 10
WHEN convert(varchar,R.DTHCAD,8) BETWEEN 18:00:01 AND 23:59:59 THEN 11
ELSE 00
END as hora,
--cast(R.DTHCAD as time) as tsthora1,
--convert(varchar,R.DTHCAD,8) as tsthora2,
--R.DTHCAD,
--R.NUMREQ,
--R.NUMNOT,
sum(R.TOTGERAL) as total
FROM REQVDA AS R
WHERE (1=1)
AND (R.TIPOREQ = VD)
AND (R.DATEMI = 14/06/2012)
group by
--hora
convert(varchar,R.DTHCAD,8)
--R.NUMREQ,
--R.NUMNOT,
--R.TOTGERAL

order by
--hora
convert(varchar,R.DTHCAD,8)
Responder

14/06/2012

Bruno Leandro

Ola Alex, tente desta forma.


SELECT
TOP 500
CASE
WHEN DATEPART(HHmi,R.DTHCAD) BETWEEN 0000 AND 0900 THEN 1
WHEN DATEPART(HHmi,R.DTHCAD) BETWEEN 0901 AND 1000 THEN 2
WHEN DATEPART(HHmi,R.DTHCAD) BETWEEN 1001 AND 1100 THEN 3
WHEN DATEPART(HHmi,R.DTHCAD) BETWEEN 1101 AND 1200 THEN 4
WHEN DATEPART(HHmi,R.DTHCAD) BETWEEN 1201 AND 1300 THEN 5
WHEN DATEPART(HHmi,R.DTHCAD) BETWEEN 1301 AND 1400 THEN 6
WHEN DATEPART(HHmi,R.DTHCAD) BETWEEN 1401 AND 1500 THEN 7
WHEN DATEPART(HHmi,R.DTHCAD) BETWEEN 1501 AND 1600 THEN 8
WHEN DATEPART(HHmi,R.DTHCAD) BETWEEN 1601 AND 1700 THEN 9
WHEN DATEPART(HHmi,R.DTHCAD) BETWEEN 1701 AND 1800 THEN 10
WHEN DATEPART(HHmi,R.DTHCAD) BETWEEN 1801 AND 2359 THEN 11
ELSE 0
END,
cast(R.DTHCAD as time),
R.DTHCAD,
--R.NUMREQ,
--R.NUMNOT,
R.TOTGERAL
FROM JACSYSDB.DBO.REQVDA AS R
WHERE (1=1)
AND (R.TIPOREQ = VD)

group by
1
--R.NUMREQ,
--R.NUMNOT,
--R.TOTGERAL
Responder

14/06/2012

Alex Lekao

Oooopa... eu aqui novamente....

camarada consegui resolver o agrupamento, repeti o case no group by e no order by, vou colar novamente o codigo abaixo.

agora se houver uma maneira de otimizar o script ou outra forma de faze-lo, algo que fique melhor mais profissional, etc.

aceito sugestoes... rsrsr

eh isso abraco e muito obrigado.

SELECT
CASE
WHEN convert(varchar,R.DTHCAD,8) BETWEEN 00:00:00 AND 09:00:00 THEN 01
WHEN convert(varchar,R.DTHCAD,8) BETWEEN 09:00:01 AND 10:00:00 THEN 02
WHEN convert(varchar,R.DTHCAD,8) BETWEEN 10:00:01 AND 11:00:00 THEN 03
WHEN convert(varchar,R.DTHCAD,8) BETWEEN 11:00:01 AND 12:00:00 THEN 04
WHEN convert(varchar,R.DTHCAD,8) BETWEEN 12:00:01 AND 13:00:00 THEN 05
WHEN convert(varchar,R.DTHCAD,8) BETWEEN 13:00:01 AND 14:00:00 THEN 06
WHEN convert(varchar,R.DTHCAD,8) BETWEEN 14:00:01 AND 15:00:00 THEN 07
WHEN convert(varchar,R.DTHCAD,8) BETWEEN 15:00:01 AND 16:00:00 THEN 08
WHEN convert(varchar,R.DTHCAD,8) BETWEEN 16:00:01 AND 17:00:00 THEN 09
WHEN convert(varchar,R.DTHCAD,8) BETWEEN 17:00:01 AND 18:00:00 THEN 10
WHEN convert(varchar,R.DTHCAD,8) BETWEEN 18:00:01 AND 23:59:59 THEN 11
ELSE 00
END as hora,
--cast(R.DTHCAD as time) as tsthora1,
--convert(varchar,R.DTHCAD,8) as tsthora2,
--R.DTHCAD,
--R.NUMREQ,
--R.NUMNOT,
sum(R.TOTGERAL) as total
FROM REQVDA AS R
WHERE (1=1)
AND (R.TIPOREQ = VD)
AND (R.DATEMI = 14/06/2012)
group by
CASE
WHEN convert(varchar,R.DTHCAD,8) BETWEEN 00:00:00 AND 09:00:00 THEN 01
WHEN convert(varchar,R.DTHCAD,8) BETWEEN 09:00:01 AND 10:00:00 THEN 02
WHEN convert(varchar,R.DTHCAD,8) BETWEEN 10:00:01 AND 11:00:00 THEN 03
WHEN convert(varchar,R.DTHCAD,8) BETWEEN 11:00:01 AND 12:00:00 THEN 04
WHEN convert(varchar,R.DTHCAD,8) BETWEEN 12:00:01 AND 13:00:00 THEN 05
WHEN convert(varchar,R.DTHCAD,8) BETWEEN 13:00:01 AND 14:00:00 THEN 06
WHEN convert(varchar,R.DTHCAD,8) BETWEEN 14:00:01 AND 15:00:00 THEN 07
WHEN convert(varchar,R.DTHCAD,8) BETWEEN 15:00:01 AND 16:00:00 THEN 08
WHEN convert(varchar,R.DTHCAD,8) BETWEEN 16:00:01 AND 17:00:00 THEN 09
WHEN convert(varchar,R.DTHCAD,8) BETWEEN 17:00:01 AND 18:00:00 THEN 10
WHEN convert(varchar,R.DTHCAD,8) BETWEEN 18:00:01 AND 23:59:59 THEN 11
ELSE 00
END
--hora
--convert(varchar,R.DTHCAD,8)
--R.NUMREQ,
--R.NUMNOT,
--R.TOTGERAL

order by
CASE
WHEN convert(varchar,R.DTHCAD,8) BETWEEN 00:00:00 AND 09:00:00 THEN 01
WHEN convert(varchar,R.DTHCAD,8) BETWEEN 09:00:01 AND 10:00:00 THEN 02
WHEN convert(varchar,R.DTHCAD,8) BETWEEN 10:00:01 AND 11:00:00 THEN 03
WHEN convert(varchar,R.DTHCAD,8) BETWEEN 11:00:01 AND 12:00:00 THEN 04
WHEN convert(varchar,R.DTHCAD,8) BETWEEN 12:00:01 AND 13:00:00 THEN 05
WHEN convert(varchar,R.DTHCAD,8) BETWEEN 13:00:01 AND 14:00:00 THEN 06
WHEN convert(varchar,R.DTHCAD,8) BETWEEN 14:00:01 AND 15:00:00 THEN 07
WHEN convert(varchar,R.DTHCAD,8) BETWEEN 15:00:01 AND 16:00:00 THEN 08
WHEN convert(varchar,R.DTHCAD,8) BETWEEN 16:00:01 AND 17:00:00 THEN 09
WHEN convert(varchar,R.DTHCAD,8) BETWEEN 17:00:01 AND 18:00:00 THEN 10
WHEN convert(varchar,R.DTHCAD,8) BETWEEN 18:00:01 AND 23:59:59 THEN 11
ELSE 00
END
--hora
--convert(varchar,R.DTHCAD,8)
Responder

14/06/2012

Alex Lekao

Oi Bruno, bom dia!!!

Cara nao vi seu post quando postei a resposta...

entao vou testar com seu codigo tbm para verificar como fica.

Brigadao pela foca.
Responder

14/06/2012

Alex Lekao

Oi Bruno, bom dia!!!

Deu mensagem que HHmi nao eh uma opcao datepart reconhecida.

Mais uma vez muito obrigado.
Responder

14/06/2012

Emanoély Gura

Éé Alex.. assim num vai rolar..

Faz assim:

WHEN convert(date,R.DTHCAD,108) BETWEEN 00:00:00 AND 09:00:00 THEN 1

Veja que formato você tá salvando as datas no banco... aaaa-mm-dd ou aa-mm-dd pra daí sim usar o convert certo.
Qualquer dúvida, de uma olhada aqui óó:
http://msdn.microsoft.com/pt-br/library/ms187928.aspx

Diz aí se rolou ou não.

Abrass
Responder

14/06/2012

Emanoély Gura

Num fico como link ali, mas num dá nada..

Observe aquela tabela que tem de Estilo de data e hora.. acho que ajuda!


:)
Responder

14/06/2012

Alex Lekao

Oi Manu, boa tarde!!!

Entao com esse convert que vc postou nao da certo porque vai converter datahora para data, ai vai usar somente as datas.

to dando uma olhada no link que mandou.

Obrigado.
Responder

14/06/2012

Emanoély Gura

Ahh beleza..

É, vai ter q achar o convert certo pro teu formato de data. Espero que o link ajude então...

:)

Conta aqui se deu certo..
Responder

14/06/2012

Alex Lekao

blz...

um dos posts que cologuei acima eu ja tinha conseguido o formato adequado.

so estava com problema com o agrupamento, mas usei o mesmo case no agrupamento e na ordenacao e deu certo.

agora so precisaria saber se esse codigo ta bom ou se da para melhorar por causa de desempenho essas coisas...

mais uma vez... muito obrigado.
Responder

14/06/2012

Emanoély Gura

ahh taaah.. posta o código de novo??

:)
Responder

Assista grátis a nossa aula inaugural

Assitir aula

Saiba por que programar é uma questão de
sobrevivência e como aprender sem riscos

Assistir agora

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar