首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >获取Oracle中每个客户的最后订单ID和日期

问获取Oracle中每个客户的最后订单ID和日期
EN

Stack Overflow用户
提问于 2017-07-10 16:05:16
回答 1查看 715关注 0票数 0

这是一个orcale数据库,我正在尝试获取每个客户的最后一个订单ID及其日期。我对MySQL非常熟悉,能够在MySQL系统中编写类似以下内容的代码:

https://www.w3schools.com/SQL/trysql.asp?filename=trysql_select_all

代码语言:javascript
复制
SELECT CustomerID, COUNT(OrderID), MAX(OrderDate) as Last_Order_Date,
    (SELECT OrderID FROM Orders O2 
    WHERE O2.CustomerId = O1.CustomerId
    ORDER BY OrderDate DESC LIMIT 1)
    AS LAST_ORDER_ID
FROM [Orders] O1
GROUP BY CustomerID
ORDER BY CustomerID

但是,我还不能为Oracle数据库编写等同的代码。让我犯错的部分是,我必须为order by编写一个子查询,然后选择前1个...但这也需要进入我的更大的查询,即为每个客户获取最后一个订单。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-07-10 16:20:06

使用MAX( ... ) KEEP ( DENSE_RANK LAST ... )

代码语言:javascript
复制
SELECT CustomerID,
       COUNT( OrderID ),
       MAX( OrderDate ) AS Last_Order_Date,
       MAX( OrderID ) KEEP ( DENSE_RANK LAST ORDER BY OrderDate ) AS Last_Order_ID
FROM   Orders
GROUP BY CustomerID
ORDER BY CustomerID;

或者使用分析函数:

代码语言:javascript
复制
SELECT CustomerID,
       Num_Orders,
       OrderDate AS Last_Order_Date,
       OrderID AS Last_Order_ID
FROM   (
  SELECT o.*,
         COUNT( OrderID ) OVER ( PARTITION BY CustomerID ) AS Num_Orders,
         ROW_NUMBER() OVER ( PARTITION BY CustomerID
                             ORDER BY OrderDate DESC, OrderID DESC ) AS rn
  FROM   orders o
)
WHERE  rn = 1
ORDER BY CustomerID;
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45006763

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档