gpt4 book ai didi

sql - Oracle中如何选择前100行?

转载 作者:行者123 更新时间:2023-12-03 06:21:45 24 4
gpt4 key购买 nike

我的需求是获取每个客户的最新订单,然后获取前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 对外部查询的结果进行排序
  • 添加一个最外层查询,使用 ROWNUM 过滤前 100 行

查询:

  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=1
ORDER BY create_time desc
) WHERE rownum <= 100

Oracle 12c 更新

在 12.1 版本中,Oracle 引入了 "real" Top-N queries 。使用新的 FETCH FIRST... 语法,您还可以使用:

  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)

关于sql - Oracle中如何选择前100行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27034585/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com