这是使用递归cte和窗口函数的一种方法:
with
tab as (
select
t.*,
dense_rank() over(order by item) drn
from mytable t
),
cte as (
select t.* from tab t where drn = 1
union all
select t.*
from tab t
inner join cte c on t.drn = c.drn + 1 and t.itemb > c.itemb
)
select select item, itemb, date
from cte c
where itemb = (select min(itemb) from cte c1 where c1.item = c.item)
派生表tab
根据item
为每个记录分配等级(具有相同item
的记录获得相同的等级)。
然后,递归cte从对应于第一个item
的行开始,并逐个处理item
,确保“下一个” itemb
大于前一个。
最后,外部查询在每个itemb
的第一个item
上进行过滤。
项目| itemb |日期:- :---- | :---------X | A | 2014-01-01Y | B | 2014-01-02Z | C | 2014-01-02