展开限制SQL查询结果使用lag()窗口函数



我有一个表,列id,score,parent_idscore排序。我在这里问了一个场景。

与前面的问题不同的是,parent_id可能出现在多个行中,而不是必要的序列行。更新后的表:

<表类> id 得分 parent_id tbody><<tr>58591058592157043958592106415482106415451992751992343845996519921675761558593465729434657294012023401203181745821817458

也许这将为您工作,重构您现有的查询,但替代滞后使用存在,这迎合了非顺序行,给这个尝试:

select id, score, parent_id
from (
select *, Sum(keep) over (order by score desc) seq
from (
select *, 
case when exists (
select * from t t2 
where t2.parent_id = t.parent_id and t2.score > t.score
) then 0 else 1 end keep
from t
)t
)s
where seq <= 5
order by score desc;

一个可以考虑的方法是:

SELECT t1.*
FROM t t1
WHERE
(SELECT count(distinct parent_id)
FROM t t2
WHERE t2.score >= t1.score) <= 5

你可以在这里看到小提琴。WHERE子句只是计算具有score>=当前行的不同parent_id的个数。

相关内容

  • 没有找到相关文章

最新更新