Jump to content
JoaoVM

Conjunto de Ultimos Registos

Recommended Posts

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;

Share this post


Link to post
Share on other 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

Edited by HappyHippyHippo

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

Share this post


Link to post
Share on other 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..

Share this post


Link to post
Share on other 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

Share this post


Link to post
Share on other 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)

  • Vote 1

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

Share this post


Link to post
Share on other 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)

Edited by JoaoVM

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.