Oracle SQL:如何为每个“组”/“集群”选择N条记录
我有一个表big_table,有400万笔记录,它们通过名为“process_type_cod”的列聚积在40组中.此列也许回收的值列表位于第二个表中.我们称之为small_table. 因此,我们将big_table与一个名为process_type_cod的NOT NULL FK指向small_table(假设两个表上的列名沟通). 我想要big_table的N记录(即10),用于small_table的每个记录. 即 是否可以行使单个SQL函数获取? 办理要领我保举一个说明函数,如rank()或row_number().您可以行使硬编码连系执行此操纵,但说明成果可觉得您完成全部费力事变.select * from ( select bt.col_a,bt.col_b,bt.process_type_cod,row_number() over ( partition by process_type_cod order by col_a nulls last ) rank from small_table st inner join big_table bt on st.process_type_cod = bt.process_type_cod ) where rank < 11 ; 您也许乃至不必要插手,由于big_table具有您存眷的全部范例.在这种环境下,只需将’from子句’变动为行使big_table并删除毗连. 这样做是执行查询,然后行使分区语句中的“order by”运算符对记录举办排序.对付给定的组(这里我们按col_a分组),数字行号(即1,2,3,4,5,n 1 ……)持续地应用于每个记录.在外部where子句中,只需行使低于N的数字举办过滤. (编辑:湖南网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |