Oracle:如何按行中的第1个值进行分组?

时间:2017-01-19 16:56:12

标签: sql oracle

表中有3列:ITEM,SUB_ITEM,DATE_CREATED。

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

场景:

  1. 有3个不同的项目(AAA1,AAB2,ABB3)
  2. 这些项目中的所有3项都有多个子项目。
  3. 每个项目都有一个子项目,每个项目都相同(例如,项目的所有3项都有一个SUB_ITEM = 101010)
  4. 我正在尝试做类似的事情:

    select * 
    from table 
    group by ITEM, SUB_ITEM, DATE_CREATED
    

    如何让它只显示1行?我不在乎它选择AAA1或AAB2还是ABB3,我只是想让它选择1并删除其余部分,这样每个SUB_ITEM会显示1行,但仍然至少显示一个父项。

    编辑:

    感谢 mathguy 回答上述问题。

    问题2: 除了sub_item之外,是否可以按项目的前2个字母分组?因此,不是返回1行,而是返回2行:AAA1和AAB2将级联到1行,而ABB3将是第2行,因为'AA'和'AB'是不同的。

    编辑2:请参阅主要答案评论以回答问题2

1 个答案:

答案 0 :(得分:2)

一种方法是按sub_item进行分组,然后将maxmin放在另一列上(让我们说max超过date_created )以及在同一行的剩余栏目中的任何内容。

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
;