我的要求是获得每个客户的最新订单,然后获得前100条记录。 & n* y5 J0 f: R E我写了一个查询,如下所示,以获得每个客户的最新订单。内部查询工作正常。但我不知道如何根据结果获得前100名。 x4 n0 y+ @" {/ M+ a k SELECT * FROM ( SELECT id,client_id,ROW_NUMBER() OVER(PARTITION BY client_id ORDER BY create_time DESC) rn FROM order ) WHERE rn=1有什么想法吗? $ f- J' K) [9 b( h 5 ^9 M+ [2 q0 s6 G! \0 H 解决方案: 3 t. L6 Y8 L. {! D8 L6 y 假设create_time包括创建订单的时间,你想要100个有最新订单的客户,可以: . J: K( n' U$ b& i( q( ?8 c添加到最内部的查询中create_time # h& z* k; F% V; R, E! W6 S4 o通过以下命令对外部查询结果进行排序 create_time desc0 C# {' h1 U9 c' R" C9 T
添加最外层查询,该查询使用以下内容过滤前100行 ROWNUM询问: & b) [7 l9 [' E9 x" S6 W 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的更新 " }/ x! `% x8 |$ ^$ U( z在版本12.1中,Oracle引入真 Top-N查询。使用新的FETCH FIRST...您还可以使用语法: 5 K& U2 z+ ?/ o) N- o9 B 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)