Where pelo select

Asked

Viewed 59 times

2

How do I make the data referenced to select 'result' return only those containing the value '1'

inserir a descrição da imagem aqui

    SELECT 
    DATE(m.data_marcacao) AS data,
    nome_operacao operacao,
    f.cracha_funcionario,
    MAX(IF(id_tipo_marcacao_est = 4,
        @i:=TIME(data_marcacao),
        NULL)) ref_inicio,
    MAX(IF(id_tipo_marcacao_est = 5,
        @f:=TIME(data_marcacao),
        NULL)) ref_fim,
    TIMEDIFF(MAX(IF(id_tipo_marcacao_est = 5,
                data_marcacao,
                NULL)),
            MAX(IF(id_tipo_marcacao_est = 4,
                data_marcacao,
                NULL))) intervalo,
    CASE
        WHEN
            TIMEDIFF(MAX(IF(id_tipo_marcacao_est = 5,
                        data_marcacao,
                        NULL)),
                    MAX(IF(id_tipo_marcacao_est = 4,
                        data_marcacao,
                        NULL))) < '00:59:00'
        THEN
            1
        ELSE 0
    END result,
    segundo_refeicao_jornada_horas ref_tempo
FROM
    bd_sipe.tb_marcacao m
        INNER JOIN
    bd_sipe.tb_funcionario f ON m.id_funcionario = f.id_funcionario
        INNER JOIN
    bd_sipe.tb_operacao o ON o.id_operacao = f.id_operacao_est
        INNER JOIN
    bd_sipe.tb_jornada_horas jh ON jh.id_jornada_horas = m.jornada_horas
WHERE
    DATE(data_marcacao) BETWEEN '2015-01-15' AND '2015-04-16'
        AND id_tipo_marcacao_est IN (4 , 5)
        AND segundo_refeicao_jornada_horas = 3600
GROUP BY f.cracha_funcionario
ORDER BY o.nome_operacao
;

1 answer

6


Try using the HAVING result = 1 in this way:

SELECT 
    DATE(m.data_marcacao) AS data,
    nome_operacao operacao,
    f.cracha_funcionario,
    MAX(IF(id_tipo_marcacao_est = 4,
        @i:=TIME(data_marcacao),
        NULL)) ref_inicio,
    MAX(IF(id_tipo_marcacao_est = 5,
        @f:=TIME(data_marcacao),
        NULL)) ref_fim,
    TIMEDIFF(MAX(IF(id_tipo_marcacao_est = 5,
                data_marcacao,
                NULL)),
            MAX(IF(id_tipo_marcacao_est = 4,
                data_marcacao,
                NULL))) intervalo,
    CASE
        WHEN
            TIMEDIFF(MAX(IF(id_tipo_marcacao_est = 5,
                        data_marcacao,
                        NULL)),
                    MAX(IF(id_tipo_marcacao_est = 4,
                        data_marcacao,
                        NULL))) < '00:59:00'
        THEN
            1
        ELSE 0
    END result,
    segundo_refeicao_jornada_horas ref_tempo
FROM
    bd_sipe.tb_marcacao m
        INNER JOIN
    bd_sipe.tb_funcionario f ON m.id_funcionario = f.id_funcionario
        INNER JOIN
    bd_sipe.tb_operacao o ON o.id_operacao = f.id_operacao_est
        INNER JOIN
    bd_sipe.tb_jornada_horas jh ON jh.id_jornada_horas = m.jornada_horas
WHERE
    DATE(data_marcacao) BETWEEN '2015-01-15' AND '2015-04-16'
        AND id_tipo_marcacao_est IN (4 , 5)
        AND segundo_refeicao_jornada_horas = 3600
GROUP BY f.cracha_funcionario
HAVING result = 1
ORDER BY o.nome_operacao
;
  • it worked!! vlw

Browser other questions tagged

You are not signed in. Login or sign up in order to post.