sql >> Base de Datos >  >> RDS >> Oracle

Oracle obtiene DISTINCT numérico con un CLOB en la consulta

Si aplica un hash al clob, puede usarlo en una subconsulta para tomar el ID de fila máximo para cada eventid_nbr con el mismo valor hash de clob. Luego, simplemente filtre su tabla de relación_dos en la 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);

El 3 en HASH especifica SHA, pero también puede usar MD4 (1) o MD5 (2) si lo desea.

Estoy pensando que esto podría ser muy lento si tiene muchas filas en la tabla RELATION_TWO y estoy seguro de que esto se puede escribir para que funcione mejor, pero el concepto es sólido.