sql >> Database >  >> RDS >> Oracle

Oracle krijgt DISTINCT numeriek met een CLOB in de query

Als je de clob hasht, kun je deze in een subquery gebruiken om de max rowid te pakken voor elke eventid_nbr met dezelfde clob-hashwaarde. Dan filter je gewoon je relation_two-tabel in de waar-clausule.

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

De 3 in de HASH gespecificeerde SHA, maar je kunt ook MD4 (1) of MD5 (2) gebruiken als je wilt.

Ik denk dat dit erg traag kan zijn als je veel rijen in de RELATION_TWO tabel hebt en ik weet zeker dat dit geschreven kan worden om beter te presteren, maar het concept is goed.




  1. MySQL Temp-tabel Invoegen

  2. Links en rechts samenvoegen met het plusteken (+) in Oracle

  3. Hoe een gebruiker aan te maken in Oracle en privileges toe te wijzen

  4. Symfony2 Doctrine Qb STR_TO_DATE Onbekende functie