In the next example you´ll see how to use an exists stament and how to use subqueries in ZF2.
$adapter = $this->tableGateway->adapter; $sql = new Sql($adapter); $campos = array( 'fecha_generacion' => 'fecha_generacion', 'numero_envio' => new Expression('max(numero_envio)') ); $subSelect = $sql->select(); $subSelect->columns(array('codigo_empresa')); $subSelect->from(array('b' => 'documento_resumen')) ->where('b.codigo_empresa = a.codigo_empresa') ->where('b.tipo_documento = a.tipo_documento') ->where('b.fecha_generacion = a.fecha_generacion') ->where('b.codigo_respuesta = \'0\''); $select = $sql->select() ->quantifier(\Zend\Db\Sql\Select::QUANTIFIER_DISTINCT) ->columns($campos) ->from(array('a' => 'documento_resumen')) ->where( array( 'a.codigo_empresa' => $codigoEmp, 'a.tipo_documento' => $tipoDoc, 'a.codigo_respuesta' => '2' ) ); $select->where->addPredicate( new \Zend\Db\Sql\Predicate\Expression( "NOT EXISTS(" . @$subSelect->getSqlString($adapter->getPlatform()) . ")" ) ); $select->group('a.fecha_generacion'); // Run the query $statement = $sql->prepareStatementForSqlObject($select); $result = $statement->execute(); return ArrayUtils::iteratorToArray($result);