繁体   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