表中有3列:ITEM,SUB_ITEM,DATE_CREATED。
ITEM - item id (string)
SUB_ITEM - item id (int)
DATE_CREATE - date the SUB_ITEM was created (date)
场景:
我正在尝试做类似的事情:
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
答案 0 :(得分:2)
一种方法是按sub_item
进行分组,然后将max
或min
放在另一列上(让我们说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
;