Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

davisvasconcellos

[Resolvido] update com selec sum

Recommended Posts

pessoal.

na minha tabela chamada ponto tem os campos

Codigo, cod_func, (e1,s1,e2,s2),total_dia,teste

se eu rodar:

update ponto set teste = cod_func

(o mysql coloca certinho o cod_user dentro do campo teste um para cada linha

 

mas eu não consigo rodar um somatório e inserir.

e1,s1,e2,s2 são os horários de entrada e saída...

 

select sec_to_time(sum(

ifnull(time_to_sec(TIMEDIFF(s1,e1)),0)+

ifnull(time_to_sec(TIMEDIFF(s2,e2)),0)+

ifnull(time_to_sec(TIMEDIFF(s3,e3)),0)))

as TOTALDIA from ponto where codigo = 1900

 

resulta a soma deste dia com id 1900

 

eu gostaria de fazer isto sem precisar do código da linha. só passar o cod_func

 

update ponto set teste =

(

select TOTALDIA from

(

select sec_to_time(sum(

ifnull(time_to_sec(TIMEDIFF(s1,e1)),0)+

ifnull(time_to_sec(TIMEDIFF(s2,e2)),0)+

ifnull(time_to_sec(TIMEDIFF(s3,e3)),0)))

as TOTALDIA from ponto where cod_func = 149

)as Tdia

)

where cod_func = 149

 

fiz isso mas ae ele fez o somatório de todos os dias e colocou igual para todos tipo 150:00:00

 

 

desculpem se está um pouco parecido com o post anterior, mas não consegui apagá-lo.. se alguém puder apagar o anterior... este post está mais completo

 

só quero somar as horas e inserir no campo total_dia só o total daquela linha que é referente a um dia , um por linha...

 

já catei e to meio perdido.

 

obrigado

Compartilhar este post


Link para o post
Compartilhar em outros sites

Realmente a query vai por um somatório para todos cujo o código seja 149.

Não entendi o que você quer fazer. Coloque a estrutura do banco, alguns dados

para teste, informe como aparece e como você quer que apareça.

 

Abraços.

Compartilhar este post


Link para o post
Compartilhar em outros sites

OK. está simplificada a tabela só com o que interessa

 

---------------------------------------------------------

ID |--|cod|--|-----data-----|--|--E1--|---|--S1--|--|--E2--|---|--S2--|--|TOTAL

---------------------------------------------------------

01 |--|145|--|20-06-2011|--|09:00|--|12:00|--|13:00|--|18:00|--|

02 |--|149|--|21-06-2011|--|09:30|--|12:00|--|13:00|--|18:00|--|

03 |--|145|--|22-06-2011|--|09:50|--|12:00|--|13:20|--|18:00|--|

04 |--|145|--|23-06-2011|--|09:00|--|12:00|--|13:00|--|18:00|--|

05 |--|145|--|24-06-2011|--|09:00|--|12:00|--|13:00|--|18:00|--|

06 |--|145|--|25-06-2011|--|09:00|--|12:00|--|13:00|--|18:00|--|

07 |--|145|--|26-06-2011|--|09:00|--|12:00|--|13:00|--|18:00|--|

08 |--|145|--|27-06-2011|--|09:00|--|12:00|--|13:00|--|18:00|--|

-----------------------------------------------------------------

 

 

tem o cod do usuário, E1,S1... que são as entradas e saídas.. e um campo total.

 

para saber o total do dia eu faço, (S1-E1)+(S2-E2)

uso o ifnull no select para o somatório não retornar null caso o malandro não marque uma entrada ou saída.

 

sec_to_time(sum(

ifnull(time_to_sec(TIMEDIFF(s1,e1)),0)+

ifnull(time_to_sec(TIMEDIFF(s2,e2)),0)+

ifnull(time_to_sec(TIMEDIFF(s3,e3)),0)))

as TOTALDIA from ponto

 

 

esse select sai o resultado certinho (TOTALDIA=08:00) mas se eu especificar where cod_func=xxx (atualiza todos os registros com o mesmo valor) ou ID_linha=xxxx (atualiza somente uma linha-lógico!)

 

eu quero atualizar o campo TOTAL com o somatório dos dias um por linha passando o id do usuário.

 

no campo total tenha o somatório do dia

retornaria algo assim:

ID |--|cod|--|-----data-----|--|--E1--|---|--S1--|--|--E2--|---|--S2--|--|TOTAL

-----------------------------------------------------------------------------------------------

01 |--|145|--|20-06-2011|--|09:00|--|12:00|--|13:00|--|18:00|--|08:00|

02 |--|149|--|21-06-2011|--|09:30|--|12:00|--|13:00|--|18:00|--|07:30|

 

 

compliquei?

 

obrigado

Compartilhar este post


Link para o post
Compartilhar em outros sites

OK. está simplificada a tabela só com o que interessa

 

---------------------------------------------------------

ID |--|cod|--|-----data-----|--|--E1--|---|--S1--|--|--E2--|---|--S2--|--|TOTAL

---------------------------------------------------------

01 |--|145|--|20-06-2011|--|09:00|--|12:00|--|13:00|--|18:00|--|

02 |--|149|--|21-06-2011|--|09:30|--|12:00|--|13:00|--|18:00|--|

03 |--|145|--|22-06-2011|--|09:50|--|12:00|--|13:20|--|18:00|--|

04 |--|145|--|23-06-2011|--|09:00|--|12:00|--|13:00|--|18:00|--|

05 |--|145|--|24-06-2011|--|09:00|--|12:00|--|13:00|--|18:00|--|

06 |--|145|--|25-06-2011|--|09:00|--|12:00|--|13:00|--|18:00|--|

07 |--|145|--|26-06-2011|--|09:00|--|12:00|--|13:00|--|18:00|--|

08 |--|145|--|27-06-2011|--|09:00|--|12:00|--|13:00|--|18:00|--|

-----------------------------------------------------------------

 

 

tem o cod do usuário, E1,S1... que são as entradas e saídas.. e um campo total.

 

para saber o total do dia eu faço, (S1-E1)+(S2-E2)

uso o ifnull no select para o somatório não retornar null caso o malandro não marque uma entrada ou saída.

 

sec_to_time(sum(

ifnull(time_to_sec(TIMEDIFF(s1,e1)),0)+

ifnull(time_to_sec(TIMEDIFF(s2,e2)),0)+

ifnull(time_to_sec(TIMEDIFF(s3,e3)),0)))

as TOTALDIA from ponto

 

 

esse select sai o resultado certinho (TOTALDIA=08:00) mas se eu especificar where cod_func=xxx (atualiza todos os registros com o mesmo valor) ou ID_linha=xxxx (atualiza somente uma linha-lógico!)

 

eu quero atualizar o campo TOTAL com o somatório dos dias um por linha passando o id do usuário.

 

no campo total tenha o somatório do dia

retornaria algo assim:

ID |--|cod|--|-----data-----|--|--E1--|---|--S1--|--|--E2--|---|--S2--|--|TOTAL

-----------------------------------------------------------------------------------------------

01 |--|145|--|20-06-2011|--|09:00|--|12:00|--|13:00|--|18:00|--|08:00|

02 |--|149|--|21-06-2011|--|09:30|--|12:00|--|13:00|--|18:00|--|07:30|

 

 

compliquei?

 

obrigado

 

 

 

eu tava mongando.

não preciso disso tudo. o que estava me quebrando é o SUM no

 

para fazer o que eu quero basta isso:

 

update tabela set total_dia = sec_to_time(

ifnull(time_to_sec(TIMEDIFF(s1,e1)),0)+

ifnull(time_to_sec(TIMEDIFF(s2,e2)),0)+

ifnull(time_to_sec(TIMEDIFF(s3,e3)),0))

where cod_func=149

 

 

 

pode fechar.

 

brigadão

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.