簡體   English   中英

獲得所有用戶使用的首付款方式的最有效方法

[英]Most efficient way of getting first payment method used by all users

可以說我在MSSQL數據庫中有一個名為“客戶”的表。 我還有一個名為“ Orders”的表,每個表都包含一個“ CustomerID”。 我想做的是生成每個“客戶”的第一個“訂單”所使用的付款方式(我們稱其為“ PaymentMethod”)的摘要。

我一直使用的方法是進行客戶選擇查詢...

SELECT <Columns> FROM Customers <WHERE>

...然后針對每個結果,進行單獨的查詢,以獲取客戶的第一筆訂單的付款方式:

SELECT TOP 1 PaymentMethod FROM Orders ORDER BY Timestamp ASC

這個過程的好處是可以以很容易修改的非常簡單的方式獲取我想要的數據,但是這意味着對每個客戶都執行查詢是一個巨大的缺點,這可能意味着每一次都需要成千上萬的額外查詢!

有沒有我沒有想到的更有效的方法? 我正在絞盡腦汁想一種直接從“ Orders”表開始選擇的方法,但是查詢不僅需要按“ CustomerID”分組,還需要獲取“ Timestamp”的MIN(),然后返回MIN()記錄的“ PaymentMethod”似乎不起作用?

您可以為此使用ROW_NUMBER

SELECT PaymentMethod 
FROM (
   SELECT PaymentMethod,
          ROW_NUMBER() OVER (PARTITION BY CustomerID  
                             ORDER BY Timestamp ASC) AS rn
   FROM Orders ) AS t
WHERE t.rn = 1

上面的查詢選擇最早的每組記錄。

我想這對您有幫助。

SELECT C.* , O.PAYMENTMETHOD FROM Customers C
INNER JOIN Orders O ON O.CustomerID = C.CustomerID
WHERE O.OrderTime = 
(SELECT TOP 1 OrderTime FROM Customers WHERE CustomerID = C.CustomerID) -- selects customer first order based on min time

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM