Oracle
 sql >> Datenbank >  >> RDS >> Oracle

Oracle erhält DISTINCT numerisch mit einem CLOB in der Abfrage

Wenn Sie den Clob hashen, können Sie ihn in einer Unterabfrage verwenden, um die maximale Rowid für jede eventid_nbr mit demselben Clob-Hashwert abzurufen. Dann filtern Sie einfach Ihre relation_two-Tabelle in der where-Klausel.

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);

Die 3 im HASH spezifiziert SHA, aber Sie können auch MD4 (1) oder MD5 (2) verwenden, wenn Sie möchten.

Ich denke, das könnte sehr langsam sein, wenn Sie viele Zeilen in der Tabelle RELATION_TWO haben, und ich bin sicher, dass dies geschrieben werden kann, um eine bessere Leistung zu erzielen, aber das Konzept ist solide.