2017-01-19 4 views
1

テーブルには、ITEM、SUB_ITEM、DATE_CREATEDという3つの列があります。Oracle:行の最初の値でグループ化する方法は?

ITEM - item id (string) 
SUB_ITEM - item id (int) 
DATE_CREATE - date the SUB_ITEM was created (date) 

シナリオ:

  1. 3別の項目の(AAA1、AAB2、ABB3)は、これらの項目のすべての3は、複数のサブアイテムを持っている
  2. があります。

    select * 
    from table 
    group by ITEM, SUB_ITEM, DATE_CREATED 
    
  3. 各項目は、私のような何かをしようとしていますそれらのそれぞれ(例えば、アイテムのすべての3を持っているSUB_ITEM = 101010)

で同じであるサブアイテムを持っています

どのようにして1行しか表示させませんか?私はそれがAAA1またはAAB2またはABB3を選択するかどうか気にしない、私はちょうど1を選択し、SUB_ITEMごとに1行を表示するので、残りの部分を削除したいが、まだ少なくとも1つの親アイテムを表示します。

編集:

は、上記の質問に答えるためにmathguyに感謝します。

質問2: サブアイテムに加えて、アイテムの最初の2文字でグループ化することはできますか?したがって、1行を返す代わりに2行を返します.AAA1とAAB2は1行にカスケードし、ABB3は2行目になります。なぜなら、 'AA'と 'AB'が異なるからです。

編集2:2

+2

サンプルの表データとそれに基づいて予想される出力を提供できますか? – GurV

答えて

2

一つの方法は、sub_itemによってグループにあり、そして別のカラム上maxまたはminを取る(のはdate_createdオーバーmaxを言わせて)、残りには何でも質問する主な答えのコメント回答を参照してください。列は同じ行にあります。

select min(item) keep (dense_rank last order by date_created) as item, 
     sub_item, max(date_created) as date_created 
from table_name 
group by sub_item 
; 
+0

私はこれを私のソリューションに適応させ、私の質問に完全に答えます。アイテムの最初の3文字でグルーピングのようなものを追加することは可能ですか?私は質問を編集しました。 –

+0

@AntonToshik - はい、試しましたか?ポストでは、最初の2文字でグループ化を表示します(3ではなく)。 'group by'節を' group by sub_item、substr(item、1,2) 'に変更してください。 – mathguy

+0

はい、私はそれを試して、それは動作しませんでしたので、私は質問をすることにしました。しかし、それが働くことを意図していたら、私は何かを逃した可能性があります、病気を再確認してください。 –

関連する問題