Oracle
 sql >> Database >  >> RDS >> Oracle

Oracle ottiene DISTINCT numerico con un CLOB nella query

Se esegui l'hashing del clob, puoi usarlo in una sottoquery per acquisire il numero massimo di rowid per ogni eventid_nbr con lo stesso valore di hash del clob. Quindi puoi semplicemente filtrare la tua tabella relaziona_due nella clausola 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);

Il 3 nell'HASH specificato SHA, ma puoi anche usare MD4 (1) o MD5 (2) se lo desideri.

Sto pensando che potrebbe essere molto lento se hai molte righe nella tabella RELATION_TWO e sono sicuro che questo può essere scritto per prestazioni migliori, ma il concetto è valido.