Oracle
 sql >> Baza danych >  >> RDS >> Oracle

Oracle otrzymuje DISTINCT numeryczne z CLOB w zapytaniu

Jeśli haszujesz clob, możesz użyć go w podzapytaniu, aby pobrać max rowid dla każdego eventid_nbr z tą samą wartością hash clob. Następnie po prostu filtrujesz swoją tabelę relations_two w klauzuli 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);

3 w HASH określa SHA, ale możesz również użyć MD4 (1) lub MD5 (2), jeśli chcesz.

Myślę, że może to być bardzo powolne, jeśli masz dużo wierszy w tabeli RELATION_TWO i jestem pewien, że można to napisać, aby działał lepiej, ale koncepcja jest słuszna.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SQL Multiple Columns w klauzuli IN do konwersji na JPA

  2. UPDATE z CASE i IN - Oracle

  3. Oracle PL/SQL:przykład dynamicznego SQL przy użyciu wykonania natychmiastowego

  4. Jak sprawdzić nieaktualne statystyki

  5. Jak otworzyć procedurę składowaną i edytować ją w SQL*Plus?