我的要求是获得每个客户的最新订单,然后获得前100条记录。 / {0 z* O: M7 [6 W( M我写了一个查询,如下所示,以获得每个客户的最新订单。内部查询工作正常。但我不知道如何根据结果获得前100名。 % n8 {: J6 j! R/ E6 a# J4 J SELECT * FROM ( SELECT id,client_id,ROW_NUMBER() OVER(PARTITION BY client_id ORDER BY create_time DESC) rn FROM order ) WHERE rn=1有什么想法吗? 9 V: z: _0 k; T# u 7 s1 \6 k. f3 y1 a. H7 |解决方案: , W n- X+ R4 }# D* I
假设create_time包括创建订单的时间,你想要100个有最新订单的客户,可以:9 N, T8 L' Q/ J8 ~- k. S 添加到最内部的查询中create_time ; y V' e6 t- c9 u0 H- y通过以下命令对外部查询结果进行排序 create_time desc 2 H, r% ^4 C: ^. n& ]! l添加最外层查询,该查询使用以下内容过滤前100行 ROWNUM询问:% Y% j* y( R- a8 H& U
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的更新 $ j9 V# }2 K7 b8 K* B2 _在版本12.1中,Oracle引入真 Top-N查询。使用新的FETCH FIRST...您还可以使用语法: ) w5 N7 U0 X3 u9 [4 v8 ? 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)