1

スライドする 3 秒のウィンドウ内で、Oracle 11.2 テーブル内の同様のレコードを識別する方法を探しています。テーブルには、24 時間以内に挿入された約 500K 行があります。

要件:

  1. これらのレコードは、UTL_MATCH.JARO_WINKLER_SIMILARITY を使用して、少なくとも 88% の類似性スコアを満たす必要があります。
  2. 3 秒以内に少なくとも 1 つの同様のレコードが存在する場合、特定のレコードの FLAG 列を更新する必要があります。

テーブル定義:

CREATE TABLE ADDR_TAB
  ( DT DATE NOT NULL,
    ADDR VARCHAR2(200) NOT NULL,
    FLAG INT
  );
CREATE INDEX ADDR_DATE_IDX ON ADDR_TAB(DT);

サンプルデータ:

insert into addr_tab values (to_date('03-OCT-13 04.36.57 PM','DD-MON-RR HH.MI.SS AM'),'test',null);
insert into addr_tab values (to_date('03-OCT-13 04.36.57 PM','DD-MON-RR HH.MI.SS AM'),'test123',null);
insert into addr_tab values (to_date('03-OCT-13 04.36.58 PM','DD-MON-RR HH.MI.SS AM'),'2test2',null);
insert into addr_tab values (to_date('03-OCT-13 04.36.58 PM','DD-MON-RR HH.MI.SS AM'),'12test',null);
insert into addr_tab values (to_date('03-OCT-13 04.37.00 PM','DD-MON-RR HH.MI.SS AM'),'12test',null);
insert into addr_tab values (to_date('03-OCT-13 04.37.02 PM','DD-MON-RR HH.MI.SS AM'),'12test',null);
insert into addr_tab values (to_date('03-OCT-13 04.37.03 PM','DD-MON-RR HH.MI.SS AM'),'1test87',null);
insert into addr_tab values (to_date('03-OCT-13 04.37.03 PM','DD-MON-RR HH.MI.SS AM'),'12test',null);
insert into addr_tab values (to_date('03-OCT-13 04.37.03 PM','DD-MON-RR HH.MI.SS AM'),'12test56',null);
insert into addr_tab values (to_date('03-OCT-13 04.37.04 PM','DD-MON-RR HH.MI.SS AM'),'12test88',null);
insert into addr_tab values (to_date('03-OCT-13 04.37.05 PM','DD-MON-RR HH.MI.SS AM'),'12test56',null);

SQLFiddle: http://sqlfiddle.com/#!4/1b53f/1

4

1 に答える 1

1

これを試して:

WITH basedata 
     AS (SELECT * 
         FROM   addr_tab 
         ORDER  BY dt) 
SELECT * 
FROM   basedata A 
WHERE  EXISTS (SELECT 1 
               FROM   basedata B 
               WHERE  ( ( A.dt <= ( B.dt + 3 / 86400 ) ) 
                        AND ( A.dt >= ( B.dt - 3 / 86400 ) ) ) 
                      AND a.ROWID <> b.ROWID 
                      AND utl_match.Jaro_winkler(A.addr, B.addr) * 100 >= 88) 

SQLFiddle: http://sqlfiddle.com/#!4/1b53f/22

于 2013-10-16T01:13:40.070 に答える