Ir para o conteúdo
JoaoVM

Conjunto de Ultimos Registos

Mensagens Recomendadas

JoaoVM    5
JoaoVM

Boas, tenho um problema, preciso de saber quantos colaboradores estão atualmente na minha linha de produção, para isso devo pesquisar pelos colaboradores que o ultimo registo é uma entrada e não uma saída. Ou seja que o ultimo movimento é uma entrada...

SELECT DISTINCT n.num_colab, n.pnome, n.unome, n.evento, n.data, n.hora, n.linha
FROM transacoes_bmw AS n
WHERE n.data=timestamp(current_date())
AND n.linha =126
AND n.evento='E'
AND NOT EXISTS (SELECT NULL
 FROM transacoes_bmw AS s, transacoes_bmw AS n
 WHERE s.data=n.data
 AND s.num_colab = n.num_colab
 AND s.evento='S')
GROUP BY n.num_colab
ORDER BY n.hora DESC;

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
HappyHippyHippo    1140
HappyHippyHippo

assim de cabeça deverá ser somente isto ... mas como estou na hora da siesta não posso confirmar

 SELECT num_colab, n.pnome, n.unome
   from transacoes_bmw
  where n.linha = 126
    and evento='S'
group by num_colab
order by `data` desc, hora desc

Editado por HappyHippyHippo

IRC : sim, é algo que ainda existe >> #p@p

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
JoaoVM    5
JoaoVM

HHH, isso devolve todas as saídas (S), ou seja, o total de trabalhadores nesse momento é 0, o que quero é contar os trabalhadores que estão dentro, ou seja, que o ultimo movimento é uma entrada (E). Melhor dizendo que tem uma entrada e não tem saída...o problema é que a maior parte das vezes eu para testar faço varias entradas e varias saídas..e mesmo que ele esteja fora da linha, dá-me a ultima entrada dele, mas no momento está fora...Não sei se me estou a explicar bem mas se não perceberes diz que tento ser mais claro..

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
JoaoVM    5
JoaoVM

Vou explicar melhor:

O que quero é o total de funcionários que tenham as entradas e não tenham saídas...

1) O funcionário entra na linha (E)-> neste momento está dentro

2) O funcionário sai da linha (S)-> neste momento está fora

3) O funcionário entra na linha(E) -> Neste momento está dentro

Aqui pretendo quem me devolva o valor 1, sendo que tenho um funcionário dentro da linha

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

1) O funcionário entra na linha (E) -> neste momento está dentro

2) O funcionário sai da linha(S) -> neste momento está fora

3) O funcionário entra na linha (E)-> Neste momento está dentro

4) O funcionário sai da linha (S)-> neste momento está fora

Aqui pretendo quem me devolva o valor 0, sendo que não tenho nenhum funcionário dentro da linha

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
HappyHippyHippo    1140
HappyHippyHippo
SELECT T1.num_colab                                                                     -- nome do colaborador
 FROM transacoes_bmw as T1                                                             -- registado na tabela das entradas
WHERE T1.linha = 126                                                                   -- a trabalhar na linha 126
  AND T1.evento = 'E'                                                                  -- em que o evento é uma entrada
  AND concat(T1.data, ' ', T1.hora) = (SELECT concat(T2.data, ' ', T2.hora) as data2   -- que a data do registo é igual ao registo
                                         FROM transacoes_bmw as T2                     -- na tabelas das entradas
                                        WHERE T2.linha = T1.linha                      -- sobre a mesma linha,
                                          AND T2.colaborador = T1.colaborador          -- o mesmo colaborador
                                     ORDER BY data2 DESC                               -- ordenada do último registo para o primeiro
                                        LIMIT 1)                                       -- seleccionando somente o primeiro da lista (último registo)


IRC : sim, é algo que ainda existe >> #p@p

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
JoaoVM    5
JoaoVM

HHH, como tinhas funcionou, devolve-me quais são os colaboradores que estão "Dentro", entretanto resolvi também de outra forma, criei uma vista com uma coluna que tem o nr de registos de entrada e outra com o nr de registos de saída. Depois nessa vista subtrai o nr de entradas pelo numero de saídas, e obtenho o resultado corretamente.

Vou postar as duas soluções:

/*VISTA QUE DEVOLVE O NUMERO DE COLABORADORES DENTRO E O NUMERO DE COLABORADORES FORA*/
CREATE VIEW TOTAL_BMW AS
SELECT distinct count(a.num_colab) as TOTAL_OUT, (SELECT distinct count(b.num_colab)
 FROM transacoes_bmw as b
 WHERE b.linha = 126
  AND b.evento='E'
 AND b.data=current_date()) AS TOTAL_IN
FROM transacoes_bmw as a
WHERE a.linha = 126
AND a.evento='S'
  AND a.data=current_date()
ORDER BY a.data desc,
 a.hora desc;

/*QUERY PARA CALCULAR O TOTAL DE COLABORADORES (TOTAL_DENTRO - TOTAL_FORA)*/
SELECT `TOTAL_IN`-`TOTAL_OUT` AS TOTAL FROM TOTAL_BMW

/*SOLUCAO HAPPYHIPPYHIPPO - ALTEREI SO PARA DAR O TOTAL*/
SELECT COUNT(T1.num_colab) AS TOTAL                                                                    
 FROM transacoes_bmw as T1															
WHERE T1.linha = 126																
  AND T1.evento = 'E'																
  AND concat(T1.data, ' ', T1.hora) = (SELECT concat(T2.data, ' ', T2.hora) as data2  
									  FROM transacoes_bmw as T2					
									 WHERE T2.linha = T1.linha					
									   AND T2.num_colab = T1.num_colab		
								  ORDER BY data2 DESC							
									 LIMIT 1)

Editado por JoaoVM

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!

Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.

Entrar Agora


×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade. Este site usa cookies para disponibilizar funcionalidades personalizadas. Para mais informações visite esta página.