如果您在編寫sql查詢時遇到麻煩,請嘗試將您的需求分解爲單個語句。
首先,您需要每個買家的訂單數量,您已經解決了這個數量。
SELECT BuyerEMail
, Name
, COUNT(*) as TotalOrders
FROM Orders
WHERE Pay <> 'PayPal'
GROUP BY BuyerEmail, Name
Order By TotalOrders Desc
現在您想顯示每個買家的最新訂單。像這樣的事情會這樣做:
SELECT BuyerEMail
, Name
, MAX(OrderDate) LatestOrder
FROM Orders
GROUP BY BuyerEmail, Name
接下來,你需要結合你的輸出到一個語句。如果比較兩種說法,兩者都是由同一組(買方和名稱)進行分組,所以你可以總結一下到:
SELECT BuyerEMail
, Name
, COUNT(*) as TotalOrders
, MAX(OrderDate) LatestOrder
FROM Orders
WHERE Pay <> 'PayPal'
GROUP BY BuyerEmail, Name
如果您只想計算其支付的訂單=「貝寶」 ,你可以這樣做:
SELECT BuyerEMail
, Name
, COUNT(CASE WHEN Pay != 'PayPal' THEN 1 END) as TotalOrders
, MAX(OrderDate) LatestOrder
FROM Orders
GROUP BY BuyerEmail, Name
現在你已經評論你也想要訂單ID爲最新的訂單。在SQLSERVER無鉛()函數2012+可以做,子查詢或者我如何喜歡交叉應用:
SELECT o.*
, OrderID as LastOrderID
, OrderDate as LastOrderDate
FROM (
SELECT BuyerEMail
, Name
, COUNT(*) as TotalOrders
FROM Orders
WHERE Pay != 'PayPal'
GROUP BY BuyerEmail, Name
) o
CROSS APPLY (
SELECT TOP 1 OrderID, OrderDate
FROM Orders s
WHERE s.BuyerEmail = o.BuyerEmail
ORDER BY OrderDate DESC
) ca
正如你所看到的,事情變得更容易,如果你在較小的邏輯部分分裂它。
這取決於你如何定義最近的訂單?你的桌子上有日期嗎? –
是的,我們有OrderDate列。我也沒有考慮做FirstOrDefault,但是你不能在SQL中... – Budyn
你有買家名單嗎? –