私は顧客による最新かつ高価な購入を探しています。私は顧客、注文、注文の詳細と製品コードを4つのテーブルがあります。すべてのアカウントはemailaddressによって一意です。ほとんどの高価な最近の注文を見つける最も効率的な方法
エラーマルチパート識別子「cx.EmailAddressは」
SELECT c.EmailAddress,
o.BillingFirstName AS WC_FirstName,
o2.LatestOrder
FROM Customers c
JOIN orders o ON o.customerid = c.customerid
JOIN(SELECT
cx.EmailAddress,
MAX(o.OrderID) AS LatestOrder
FROM Customers AS cx
JOIN Orders o ON o.customerid = cx.customerid
WHERE o.OrderStatus <> 'CANCELLED' AND o.OrderDate > '09/01/2017 00:00'
GROUP BY EmailAddress) AS o2 on o2.EmailAddress = cx.EmailAddress
GROUP BY c.EmailAddress,o.BillingFirstName
をバインドすることができませんでしたUPDATEがあまりにも別の方法でそれを試みたが、まだエラーを取得:マルチパート識別子を「c.EmailAddress」ことができませんでした縛られる。
SELECT
c.EmailAddress,
c.CustomerID,
o.OrderDate,
p.Google_Gender,
p.Google_Age_Group ,
p.productprice AS Product_Price
FROM
Customers c
JOIN
orders o ON o.CustomerID = c.CustomerID
JOIN
(SELECT
c.EmailAddress,
MAX(o.OrderID) AS LatestOrder
FROM
Orders o, Customers c
WHERE
o.OrderStatus <> 'CANCELLED' AND
o.CustomerID = c.CustomerID
GROUP BY
c.EmailAddress) AS o2 ON o2.EmailAddress = c.EmailAddress
JOIN
(SELECT
od.*,
c.EmailAddress,
row_number() over (partition BY c.EmailAddress
ORDER BY od.ProductPrice DESC, o.OrderDate DESC) AS seqnum
FROM
OrderDetails od
JOIN
Orders o ON od.OrderID = o.OrderID
JOIN
Customers c ON o.CustomerID = c.CustomerID
JOIN
(SELECT
c.EmailAddress,
MAX(o.OrderID) AS LatestOrder
FROM
Orders o , Customers c
WHERE
o.OrderStatus <> 'CANCELLED' AND
o.CustomerID = c.CustomerID
GROUP BY
c.EmailAddress) AS o2 ON o2.EmailAddress = c.EmailAddress
WHERE
o.OrderID = o2.LatestOrder) od ON od.CustomerID = c.CustomerID
AND seqnum = 1
JOIN
Products_Joined p ON od.ProductCode = p.ProductCode
FULL JOIN
(SELECT p.ProductCode, p.ProductName FROM Products_Joined AS p) AS p2 ON p2.ProductCode = p.Google_Age_Group
WHERE
AND o.PaymentAmount <> 0
AND o.OrderID = o2.LatestOrder
GROUP BY
c.EmailAddress, o.OrderDate, c.CustomerID, p.productprice,
p.Google_Age_Group, p.Google_Gender, p.Google_Pattern,
p.Google_Size, od.ProductName, p.ProductName, p2.productname,
p.productcode
ORDER BY
o.OrderDate DESC, MAX(od.ProductPrice) DESC;
クエリのヘルプが必要な場合は、テーブルの構造を含める必要があります。あなたは金額フィールドを指定せず、最も高価なものではなく、最新の注文を取得しています。 – Andrew
エラーメッセージが混乱しないように、テーブルエイリアスを繰り返さないことをお勧めします。サブクエリはたくさんあり、常に顧客のエイリアスとして 'c'を使います。あなたはそこにFULL(OUTER)JOINしてもよろしいですか? – Andrew