【发布时间】:2026-01-03 14:00:01
【问题描述】:
【问题讨论】:
-
从您的示例中我不清楚您如何确定要返回哪一行。你能更明确地定义它吗?
-
你如何定义“下一个价值”?什么“价值尚未被采用”?
标签: sql tsql greatest-n-per-group recursive-query
【问题讨论】:
标签: sql tsql greatest-n-per-group recursive-query
这是使用递归 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对应的行开始,逐个处理items,保证“下一个”itemb大于前一个。
最后,外部查询根据item 过滤第一个itemb。
【讨论】: