Select Datepart ? - SQL Server - Fórum Script Brasil
Select Datepart ?
Asked by Rafaeljuni0.ti,
Rafaeljuni0.ti
Estou com a seguinte situação... tenho um tabela para contabilizar as horas de manutenção em um equipamento no dia,mes, ano e etc..,
TMP_DT_INICIO => inicio da manutenção
TMP_DT_FIM=> termino da manutenção
TMP_EQUIPAMENTO => equipamento manutenido
* uma manutencao nunca pode ocorrer duas vezes ao menos tempo ou seja se um equipamento X estiver na tabela que ele teve retido(em manuntencao) de 10/07/2012 a 18/07/2012 não havera outro registro desse mesmo equipamento entre essa data ..a proxima manutencao devera ser maio que a data de liberacao da ultima manuntecaoq ue esse equipamento fez.
* mas esse equipamento pode entrar e sair da ofcina N vezes ou seja ele pode ficar retido entre 10/07 a 18/07 e depois ficar retido do dia 20/07 a 23/07 por exemplo.
então o que preciso é contruir uma consulta que me diz quantas horas por dia esse equipamento ficou retido dia por dia ...usando o datediff consigo pegar a diferecnas entre o inicio e fim da manutencao e isso já faco em um outra situacao mas aqui preciso saber quanta horas ele ficou retido cada dia no mes atuas ou seja
Digamos que um EQU_NOME ficou retido tres vezes no mes atual (Julho)
do dia 13/07 as 7:00 ate 15/07 as 11:30
do dia 16/07 10:00 ate 18/07 as 11:00
precisaria que ele me retornasse que no dia 01/07 ,02/07 ....ate 12/07 teve 00:00 horas de manuntecao já no dia 13/07 teve 17:00 ,14/07 teve 24:00 e por ai vai
ou seja uma coluna para cada dia do meu atual..sempre do mes atual as horas de manuntencao daquele determinado equipamento por dia ..se ele ficou parada uma vez mas foi 5 dias de manutencao preciso mostrar que dia tal teve tantas horas e por ai vai.
Acho que entendi o seu problema. Então ai vai uma pergunta..... rs.
- Onde você utilizará os dados de dias que o equipamento ficou com 0:00 hs em manutenção?
Por que estou perguntando isto: no seu exemplo, se o script estivesse funcionando, no mês de julho iriam ter 31 linhas de retorno. Uma linha para cada dia. Mas os dias que o equipamento ficou em manutenção foram apenas 2 dias. Então o sql processaria 31 linhas de resultado, para trazer 29 linhas com zero e 2 linhas com resultados que interessa.
Se fosse implementar, faria o "trabalho pesado" no código fonte, e deixaria a consulta no Banco apenas retornar os dis que houveram realmente a manutenção. Os outros dias, o próprio código colocaria zero.
Para separar as datas por hora (como no intervalo de 13/07 a 15/07), terá que testar se a data de início é igual a data de fim. Se for, irá calcular com as horas, senão, terá que calcular as horas até 23:59 hs + 1 hora. Após o calculo, somar 1 dia na data de inicio e realizar novamente o teste.