苦労

2017-10-16 18 views
0

は私が持っているコメントユーザーの表は、製品について行われてきたMAX関数を使用してクエリを書く:私がする必要がどのような苦労

FBID L_ID Comments       Comments_TS    User 
110 9885 Testing counting of feedback IDs 07-APR-17 02.52.01.495927000 PM  AMOWIN 
111 9885 Test how adding additional comments 07-APR-17 02.52.56.357410000 PM  AMOWIN 
112 9911 Test the duplication of plans on 07-APR-17 03.09.27.885587000 PM  AMOWIN 
113 9950 Testing pending for source doc  10-APR-17 12.03.19.303782000 PM  AMOWIN 
116 10218 testing initial feedback sent  02-MAY-17 09.55.59.174925000 AM  AMOWIN 
126 12758 Testing Feedback, Get Next Disabled 12-JUN-17 09.41.15.979093000 AM  AMOWIN 
127 12758 jjjjjjjjjjjjjjjjjjjjjjjjjjjjj  12-JUN-17 11.17.23.742109000 AM  MABAXT 
128 12758 Testing status      12-JUN-17 12.05.32.354178000 PM  SWMART 
129 12758 Testing returning to CSE   12-JUN-17 12.06.09.276945000 PM  AMOWIN 
130 12758 2nd Test       12-JUN-17 01.52.08.540984000 PM  AMOWIN 

でのみ、最後の(すなわち最も最近)でレコードを取得しますコメント。私はこれを試してみたが、それは似ても似つかない。

SELECT MAX(Comments_TS), L_ID, COMMENTS 
FROM F_FEEDBACK FB1 
Group By L_ID, Comments; 

私は最終的にL_ID(LINE_IDの略)により、製品の表に、この背中をリンクする必要があるので、私は、Comment_TSフィールドで(作られた最後のコメントを必要としますこれはタイムスタンプである)を各L_IDに割り当てる。私はOracle 12Cを使用していますが、誰かがまっすぐなSQLを行うことができれば、そこから把握することができます。なぜ私は今日この周りに私の頭を得ることができないのか分からない。

答えて

2

私はこれをMAX...KEEP..DENSE_RANKの方法で書いています。

一部非公式ベンチマーキング私はしばらく前なかった(古くなってもよい)、これは分析row_number()アプローチよりも(具体的にはメモリ、)より少ないリソースを使用することを示しました。

+0

私は同意します。この集計クエリが必要な場合は、(そのように思われます)、分析関数を使ってそれを嘲笑することはあまりにも大変です。 – mathguy

+0

私はこれがよりシンプルに思えて働いてくれましたが、両方の答えがうまくいったからです。私はMattにチェックマークを与えているのは、Gordonが既にたくさんの担当者を持っているからです。 :o) –

2

これは希望しないのですか?

select fb.* 
from f_feedback 
order by comments_ts desc 
fetch first 1 row only; 

あなたがrow_number()を使用し、各l_idのためにこれを必要とする場合:

select fb.* 
from (select fb.*, 
      row_number() over (partition by l_id order by comments_ts desc) as seqnum 
     from f_feedback fb 
    ) fb 
where seqnum = 1; 

あなたが同じ、最新のタイムスタンプを持つすべてのコメントをしたい場合は、代わりにrow_number()rank()を使用しています。

+0

2番目のクエリから 'fetch first 1 row only'を削除しようとしている可能性があります –

+0

私はl_idでそれを必要としますが、コードは合計で1行しか返しませんでした。すべてのL_idに少なくとも1行は必要です。 –

+0

@AaronDietz - 私はあなたが正しいと思う。私がそのラインを外したとき、それはうまくいくようだった。 –