我的要求是获得每个客户的最新订单,然后获得前100条记录。 9 T$ P' \/ T0 R- h# k1 ]: E. H" H我写了一个查询,如下所示,以获得每个客户的最新订单。内部查询工作正常。但我不知道如何根据结果获得前100名。 ; ]2 T6 s# y* c; F' i0 C% g' R SELECT * FROM ( SELECT id,client_id,ROW_NUMBER() OVER(PARTITION BY client_id ORDER BY create_time DESC) rn FROM order ) WHERE rn=1有什么想法吗? $ g! @2 B' v u& y + m# [- [1 V3 e' m7 i- _1 d, E 解决方案: $ V* h U- x7 @+ g 假设create_time包括创建订单的时间,你想要100个有最新订单的客户,可以: 0 P3 d( T8 D2 q: r) Y5 ^' ^添加到最内部的查询中create_time0 |5 t. N% k+ e0 G' E) d: J
通过以下命令对外部查询结果进行排序 create_time desc 9 k4 r+ P8 n; B6 V2 ^8 u$ |添加最外层查询,该查询使用以下内容过滤前100行 ROWNUM询问: , @9 z/ y* D4 x3 q+ u! y SELECT * FROM ( SELECT * FROM ( SELECT id, client_id, create_time, ROW_NUMBER() OVER(PARTITION BY client_id ORDER BY create_time DESC) rn FROM order WHERE rn= ORDER BY create_time desc ) WHERE rownum Oracle 12c的更新' B; t9 q9 n- P7 I! \, K0 I
在版本12.1中,Oracle引入真 Top-N查询。使用新的FETCH FIRST...您还可以使用语法:+ o; L3 {, Q, z% {1 D
SELECT * FROM SELECT id, client_id, create_time, ROW_NUMBER() OVER(PARTITION BY client_id ORDER BY create_time DESC) rn FROM order ) WHERE rn = 1 ORDER BY create_time desc FETCH FIRST 100 ROWS ONLY)