Ir para o conteúdo
JoaoVM

Conjunto de Ultimos Registos

Mensagens Recomendadas

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


Ligação para a mensagem
Partilhar noutros sites
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


Ligação para a mensagem
Partilhar noutros sites
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


Ligação para a mensagem
Partilhar noutros sites
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


Ligação para a mensagem
Partilhar noutros sites
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)

  • Voto 1

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

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
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


Ligação 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.