繁体   English   中英

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

[英]Oracle: how to group by 1st value in row?

表格在表格中有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)

我正在尝试做类似的事情:

select * 
from table 
group by ITEM, SUB_ITEM, DATE_CREATED

如何使它仅显示1行? 我不在乎它是否选择AAA1或AAB2或ABB3,我只希望它选择1并删除其余部分,因此每个SUB_ITEM将显示1行,但仍显示至少一个父项。

编辑:

感谢Mathguy回答上述问题。

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

编辑2:请参阅主要答案注释以获取问题2的答案

一种方法是按sub_item ,并在另一列上获取maxmin (例如,在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
;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM