Ir para conteúdo

POWERED BY:

Arquivado

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

NewtonCesar

uma SQL

Recommended Posts

eu tenho uma tabela que tem os campos

IDLANCAMENTO, CODVEND, LAN_DATA, HORA, NOMEVEND, CODLOJA

e quando é feito o cadastro nesta tabela ela fica assim:

 

IDLANCAMENTO DATA CODVEND CODLOJA HORA

158 2012-01-18 3 4 07:42:54
159 2012-01-18 10011 4 07:43:08
160 2012-01-18 4 5 07:43:30
161 2012-01-18 15 11 07:45:14
162 2012-01-18 3 4 12:35:48
163 2012-01-18 15 11 17:45:14
164 2012-01-18 10011 4 23:45:48

165 2012-01-18 3 4 14:30:48

166 2012-01-18 3 4 18:30:48

 

fiz esta sql:

SELECT F.codvend,F.lan_data,MIN(F.hora)as ENTRADA, MAX(F.hora) AS SAIDA,V.NOMEVEND,L.APELIDOLOJA
FROM FARMACENTRO_PONTO F
INNER JOIN VENDEDORES V ON (V.CODVEND = F.codvend)
INNER JOIN LOJAS L ON (L.CODLOJA = F.codloja)
WHERE F.lan_data BETWEEN [$DATA1] AND [$DATA2]
GROUP BY F.codvend,F.lan_data
ORDER BY F.hora

Me retorna este resultado:

CODVEND ENTRADA SAIDA NOMEVEND APELIDOLOJA

10011 07:43:08 23:45:48 FERNANDA LOJA PRECOBOM

4 07:43:30 LUIZ LOJA TABARATO

15 07:45:14 17:45:14 RAFAELA LOJA PRECOBOM

3 07:42:54 18:30:48 CAMILA LOJA MATRIZ

 

o problema acontece com a CODVEND 3 se ela tiver 4 lançamentos no mesmo dia ou seja 4 periodos

esta sql so me retorna a minima e a ultima ...alguem pode me ajudar para aparecer os 4 lançamento dela.

tipo ENTRADA1 SAIDA1 ENTRADA2 SAIDA2

aqueles que naum tiverem os 4 periodos ficaram em branco.

Obrigado

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não use group

 

 

SELECT F.codvend,F.lan_data,F.hora  as ENTRADA,  F.hora AS SAIDA,V.NOMEVEND,L.APELIDOLOJA
FROM FARMACENTRO_PONTO F  
INNER JOIN VENDEDORES V ON (V.CODVEND = F.codvend)
INNER JOIN LOJAS L ON (L.CODLOJA = F.codloja)
WHERE F.lan_data BETWEEN [$DATA1] AND [$DATA2]
ORDER BY F.hora

Compartilhar este post


Link para o post
Compartilhar em outros sites

o problema acontece com a CODVEND 3 se ela tiver 4 lançamentos no mesmo dia ou seja 4 periodosesta sql so me retorna a minima e a ultima ...alguem pode me ajudar para aparecer os 4 lançamento dela.

 

 

Não entendi o que vc precisa, desculpe.

Compartilhar este post


Link para o post
Compartilhar em outros sites

é assim

tem uns vendedores que fazem dois horarios...porem outro faz 4 horarios que é o exemplo da CODVEND 3 ela entra..sai pro almoço ..entra pro almoço e sai ou seja tem quatro periodos certo?

e na sql que eu fiz ele não pega os quatro periodo dela...so pega o primeiro e o ultimo

tipo teria que pegar assim

 

ENTRADA1 SAIDA1 ENTRADA2 SAIDA2

08:00 12:00 14:00 17:30

 

na sql que eu fiz so me retorna assim

ENTRADA SAIDA

8:00 17:30

 

deu pra entender melhor?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ocorre pq vc usou o group by e as funcões de agregração , max min sum etc.

Sem usar agregação virão todos os dados.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Mota mais eu usei ´pq a minha tabela de lançamento de pontos tem estes campos

IDLANCAMENTO DATA CODVEND CODLOJA HORA

ai na sql que fiz aonde usei o min e max eu pegava um numero menor e o maior de cada dia.

mais que eu presisava na verdade que ele me dasse esse resultado

  • ===================
  • | entradaManha | saidaManha | entradaTarde | saidaTarde | codusuario
  • | 08:00 | 12:00 | 13:00 | 18:00 | 3

Compartilhar este post


Link para o post
Compartilhar em outros sites

cara isso ai e um relogio de ponto?

se for ta errado essa estrutura

e mas facil você colocar

 

 

os campos

data,cod,hr_entra,hr_repouso,hr_retorno,hr_saida

 

pq assim será melhor de manipular.

 

e se o usuario bater o ponto varias vezes no dias tipo 20x e ai.

se ele colocar apenas entrada e repouso.

 

pense no projeto antes de fazer.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Existe algums codificacao para ENTRADA, ALMOCO, VOLTA ALMOCO e SAIDA ?!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Existe algum código que identifique entrada, saída para almoço, volta almoço e saída ?!

Ou isto é visto pelo horário ?!

Compartilhar este post


Link para o post
Compartilhar em outros sites

cara para retorna do geito que você quer e complicado.

 

isso dor de cabeça toda e por causa do banco, feito errado

Compartilhar este post


Link para o post
Compartilhar em outros sites

De fato, pois a menor e a maior data até poderia ser, mas imagine a hora do vigia da noite, entra num dia às 20h e sai no outro às 8h.

Por isto o ideal é capturar o tipo de entrada / saida do funcionario.

No SQL um CASE poderia resolver.

 

Como está a tabela/modelo não me ocorre uma forma de fazer isto via SQL puro, minha ideia inicial seria montar uma tabela temporaria e tentar montar a lógica via uma Stored Procedure.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não creio, conheço quase nada de programação de SP´s para MySql.

 

mas a ideia básica seria uma tabela temporária com os campos :

 

 

entradaManha | saidaManha | entradaTarde | saidaTarde | codusuario

 

 

um cursor leria os horários da tabela FARMACENTRO_PONTO

 

 

SELECT F.codvend,F.lan_data,F.hora  as ENTRADA,  F.hora AS SAIDA
FROM FARMACENTRO_PONTO F   
WHERE F.lan_data BETWEEN [$DATA1] AND [$DATA2] 
ORDER BY F.codvend,F.lan_data,F.hora

e com base nas entradas identificaria o tipo de entrada (entrada, almoco, volta almoco, saida) e gravaria os dados por codvend, (insert para a primeira entrada, update para as seguintes)

 

o passo seguinte seria ler a tabela temporária e emitir o rel.

 

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

Não me ocorre outra solução neste modelo que vc tem que garanta a veracidade das entradas e saídas.




			
		

Compartilhar este post


Link para o post
Compartilhar em outros sites

Mota pesquisando a madrugada toda consegui achar a solução e de certo:

 

COALESCE((SELECT FPD.hora FROM FARMACENTRO_PONTO FPD WHERE FPD.codvend = FP.codvend AND FPD.lan_data = FP.lan_data LIMIT 0,1),'00:00:00') AS HORA1,
COALESCE((SELECT FPD.hora FROM FARMACENTRO_PONTO FPD WHERE FPD.codvend = FP.codvend AND FPD.lan_data = FP.lan_data LIMIT 1,1),'00:00:00') AS HORA2,
COALESCE((SELECT FPD.hora FROM FARMACENTRO_PONTO FPD WHERE FPD.codvend = FP.codvend AND FPD.lan_data = FP.lan_data LIMIT 2,1),'00:00:00') AS HORA3,
COALESCE((SELECT FPD.hora FROM FARMACENTRO_PONTO FPD WHERE FPD.codvend = FP.codvend AND FPD.lan_data = FP.lan_data LIMIT 3,1),'00:00:00') AS HORA4,
usei subselects e a função LIMIT obrigado pela a atenção

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ok, mas teste esta sql para o "vigia noturno", mas se funcionou beleza.

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.