软糖酸酸甜甜啦 发表于 2023-9-14 12:28:16

如何在Oracle选前100行?

我的要求是获得每个客户的最新订单,然后获得前100条记录。
我写了一个查询,如下所示,以获得每个客户的最新订单。内部查询工作正常。但我不知道如何根据结果获得前100名。
                SELECT * FROM (      SELECT id,client_id,ROW_NUMBER() OVER(PARTITION BY client_id ORDER BY create_time DESC) rn       FROM order   ) WHERE rn=1有什么想法吗?
                                                               
    解决方案:                                                               
                                                                假设create_time包括创建订单的时间,你想要100个有最新订单的客户,可以:
添加到最内部的查询中create_time
通过以下命令对外部查询结果进行排序 create_time desc
添加最外层查询,该查询使用以下内容过滤前100行 ROWNUM询问:
      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的更新
在版本12.1中,Oracle引入真 Top-N查询。使用新的FETCH FIRST...您还可以使用语法:
      SELECT * FROMSELECT       id,      client_id,      create_time,   ROW_NUMBER() OVER(PARTITION BY client_id ORDER BY create_time DESC) rn   FROM order )WHERE rn = 1ORDER BY create_time descFETCH FIRST 100 ROWS ONLY)
页: [1]
查看完整版本: 如何在Oracle选前100行?