Um pequeno equívoco que eu cometi: o horário deveria vir com data! A resolução permanece, mas diminui algumas alternativas (embora ainda existem N possibilidades distintas). Peço perdão pelo descuido!
O exercício também poderia ser resolvido com um COUNT(*)? Na teoria, o id que tivesse um valor par não estaria trabalhando, e quem tivesse um valor impar ainda estaria, pois não tem como informar uma saída sem uma entrada antes.
Yukio, uma das opções também seria um CTE com FILTER e WHERE. Fiz aqui no databricks rapidinho para a galera ter outras opções, abs! WITH CTE_FILTER AS (SELECT emp_id, DATE_FORMAT(MAX(time) FILTER(WHERE action= "in"), "HH:mm:ss") as hora_max, DATE_FORMAT(MAX(time) FILTER(WHERE action= "out"), "HH:mm:ss") as hora_min FROM tabela_amazon GROUP BY emp_id) SELECT * FROM CTE_FILTER WHERE hora_max > hora_min;
faz uma cte selecionando max(time) e emp_id, da cte vc seleciona o max time, emp_ip da um join na tabela e traz a action, por fim faz um case when se action in = presente se action out = ausente
Um pequeno equívoco que eu cometi: o horário deveria vir com data! A resolução permanece, mas diminui algumas alternativas (embora ainda existem N possibilidades distintas). Peço perdão pelo descuido!
O exercício também poderia ser resolvido com um COUNT(*)? Na teoria, o id que tivesse um valor par não estaria trabalhando, e quem tivesse um valor impar ainda estaria, pois não tem como informar uma saída sem uma entrada antes.
Funcionaria também, se todos iniciam tendo uma entrada, seria certamente a melhor solução!
Pensei da mesma forma, boa.
TOP!
Muito bom! Eu fiz usando row_number() e ordenando ao contrário e pegando somente a primeira linha onde o action fosse 'in'.
Ótima estratégia!
Excelente, parabéns pela dica!
Yukio, uma das opções também seria um CTE com FILTER e WHERE. Fiz aqui no databricks rapidinho para a galera ter outras opções, abs!
WITH CTE_FILTER
AS
(SELECT
emp_id,
DATE_FORMAT(MAX(time) FILTER(WHERE action= "in"), "HH:mm:ss") as hora_max,
DATE_FORMAT(MAX(time) FILTER(WHERE action= "out"), "HH:mm:ss") as hora_min
FROM tabela_amazon
GROUP BY emp_id)
SELECT * FROM CTE_FILTER
WHERE hora_max > hora_min;
faz uma cte selecionando max(time) e emp_id, da cte vc seleciona o max time, emp_ip da um join na tabela e traz a action, por fim faz um case when se action in = presente se action out = ausente
Muito top!