sql >> データベース >  >> RDS >> Oracle

Oracleは、クエリでCLOBを使用してDISTINCT数値を取得します

    CLOBをハッシュする場合、サブクエリでそれを使用して、同じCLOBハッシュ値を持つ各eventid_nbrの最大ROWIDを取得できます。次に、where句でrelation_twoテーブルをフィルタリングするだけです。

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

    HASHの3はSHAを指定しましたが、必要に応じてMD4(1)またはMD5(2)を使用することもできます。

    RELATION_TWOテーブルに多くの行がある場合、これは非常に遅くなる可能性があると思います。これを記述してパフォーマンスを向上させることができると確信していますが、概念は適切です。




    1. LD_DEBUG環境変数

    2. SQL Serverの別のデータベースからOBJECT_NAME()を取得する方法

    3. 間隔値として列名を指定したDATE_ADDの使用

    4. Postgresで動的SQLから結果を得る方法は?