Where hair select

2

How do I get data referenced by select 'result' return only those that contain the value '1'

    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
;
    
asked by anonymous 22.04.2015 / 22:32

1 answer

6

Try to use HAVING result = 1 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
;
    
22.04.2015 / 22:38