2

unique_id列を含むテーブル(インデックスなし)があります:subscriber_id、、、、、。Aは、月ごとに異なる役員によって作成された複数のメモを持つことができます。notedate_note_created (mm/dd/yyyy hh:mm:ss am)officer_making_notesubscriber_id

subscriber_idメモがのような場所ごとに、月に1つの最後のレコードを保持するビューを効率的に作成したいと思い'%some string%'ます。

select * from 
(select subscriber_id, note, date_note_created, officer_making_note
from table
where user_id = v_sub_id
and date_note_created between to_date(v_monthstart, 'mm/dd/yyyy') 
and to_date(v_monthend, 'mm/dd/yyyy')
AND (LOWER (note) LIKE '%z%' 
or (note) LIKE '%a%'
or lower(note) like '%b%' 
or lower(note) like '%c%' 
or lower(note) like '%d%')
order by date_note_created desc)
where rownum = 1;

subscriber_id上記のコードは、重複なしで1か月間これを達成するために私が行ったことを示しています。

4

2 に答える 2

2

私の推測では、あなたはOracleを使用していると思います。これにより、分析関数にアクセスできます。

複数の月とすべてのサブスクライバーを探しているので、where条項とサブスクライバーIDの月の制限を削除しました。また、月の識別子を追加しました( "YYYY-MM"形式の文字列として):

select *
from (select subscriber_id, note, date_note_created, officer_making_note, to_char(date_note_created, 'YYYY-MM') as mon
             row_number() over (partition by subscriber_id, to_char(date_note_created, 'YYYY-MM')
                                order by date_note_created desc) as seqnum
      from table
      where /* user_id = v_sub_id and */
            /* date_note_created between to_date(v_monthstart, 'mm/dd/yyyy') and to_date(v_monthend, 'mm/dd/yyyy') AND */
            (LOWER (note) LIKE '%z%' or (note) LIKE '%a%' or lower(note) like '%b%' or lower(note) like '%c%' or lower(note) like '%d%'
            )
     )
where seqnum = 1

create view asビューを作成するには、ステートメントを使用するだけです。

于 2012-12-30T20:52:22.483 に答える
0

ROW_NUMBER次のようなウィンドウ関数を試してください。

select *
from ( 
   select subscriber_id
        , note, date_note_created, officer_making_note
        , ROW_NUMBER () OVER (PARTITION BY subscriber_id
                              ORDER BY date_note_created DESC) as rn
   from table
   where user_id = v_sub_id
      and date_note_created between to_date(v_monthstart, 'mm/dd/yyyy') 
      and to_date(v_monthend, 'mm/dd/yyyy')
      and (   lower(note) LIKE '%z%' 
           or lower(note) LIKE '%a%'
           or lower(note) like '%b%' 
           or lower(note) like '%c%' 
           or lower(note) like '%d%')
   )  xx
where rn = 1;
于 2012-12-30T20:43:21.567 に答える