2017-07-10 14 views
0

オーケーレのデータベースで、各顧客の最終注文IDとその日付を取得しようとしています。私は、MySQLのシステムでは、次のようなものを書くことができるように十分のMySQLに精通している:私は、Oracleデータベースのための同等のものを書くことができていないが最後の注文IDとOracleの顧客あたりの日付を取得

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

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 

。私を旅行させる部分は、注文のサブクエリを書いてからトップ1を選ぶ必要がありますが、それは各顧客の最後の注文を得るためのより大きな質問にも必要です。

答えて

2

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

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; 

または分析関数を使用します。

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; 
関連する問題