Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

Oracle obtém numérico DISTINCT com um CLOB na consulta


Se você fizer o hash do clob, poderá usá-lo em uma subconsulta para obter o rowid máximo para cada eventid_nbr com o mesmo valor de hash do clob. Então você apenas filtra sua tabela relacionamento_dois na cláusula where.
SELECT EVENTID_NBR, INPUT_ARGS 

FROM RELATION_ONE, RELATION_TWO 

WHERE RELATION_ONE.LOGID_NBR = RELATION_TWO.LOGID_NBR AND 
  EVENTID_NBR BETWEEN 143 AND 192 AND 
  EVENTID_NBR != 172 AND SYSDATE - 7 >= RELATION_ONE.LAST_UPDATED

  AND (RELATION_TWO.EVENTID_NBR, RELATION_TWO.ROWID) IN
      (SELECT DISTINCT EVENTID_NBR,
       MAX(ROWID) OVER (PARTITION BY EVENTID_NBR, DBMS_HASH(INPUT_ARGS,3))
       FROM RELATION_TWO);

O 3 no HASH especificado SHA, mas você também pode usar MD4 (1) ou MD5 (2) se quiser.

Estou pensando que isso pode ser muito lento se você tiver muitas linhas na tabela RELATION_TWO e tenho certeza que isso pode ser escrito para ter um desempenho melhor, mas o conceito é sólido.