2

我有一个 customerids、orderids 和订单日期的列表,我想在另一个查询中使用它们来确定客户自此日期以来是否再次订购。

示例数据:

CustomerID  OrderID OrderDate
6619    16034   2012-11-15 10:23:02.603
6858    18482   2013-03-25 11:07:14.680
4784    17897   2013-02-20 14:45:43.640
5522    16188   2012-11-22 14:53:49.840
6803    18016   2013-02-28 10:41:16.713

询问:

SELECT    dbo.[Order].CustomerID, dbo.[Order].OrderID, dbo.[Order].OrderDate
FROM         dbo.[Order] INNER JOIN
                  dbo.OrderLine ON dbo.[Order].OrderID = dbo.OrderLine.OrderID 
WHERE     (dbo.OrderLine.ProductID in (42, 44, 45, 46,47,48))

如果您需要其他任何东西,请询问。

更新::

此查询带回如上所示的结果

需要知道客户是否再次订购,对于订购上述查询中的产品之一后的任何产品 ID..

麦克风

4

5 回答 5

2

如果您只对每个客户的最后订购日期感兴趣

select customerid, max(orderdate) from theTable group by customerid;
于 2013-04-12T11:43:46.333 回答
2

在 MS SQL 中,您可以为此使用 TOP 1,您还需要按订单日期列按降序排序。

请参阅此处SQL Server - 如何选择每个用户的最新记录?

于 2013-04-12T11:46:40.217 回答
1

ROW_NUMBER在一个CTE应该工作:

WITH cte 
     AS (SELECT customerid, 
                orderid, 
                orderdate, 
                rn = Row_number() 
                       OVER( 
                         partition BY customerid 
                         ORDER BY orderdate DESC) 
         FROM   dbo.tblorder 
         WHERE  orderdate >= @orderDate 
                AND customerid = @customerID) 
SELECT customerid, orderid, orderdate
FROM   cte 
WHERE  rn = 1 

演示

(我省略了连接,因为不需要其他表中的列,只需添加它)

于 2013-04-12T11:54:43.630 回答
1
SELECT    dbo.[Order].CustomerID, MAX(dbo.[Order].OrderDate)
FROM         dbo.[Order] INNER JOIN
                  dbo.OrderLine ON dbo.[Order].OrderID = dbo.OrderLine.OrderID 
WHERE     (dbo.OrderLine.ProductID in (42, 44, 45, 46,47,48))
GROUP BY dbo.[Order].CustomerID

获取客户的最新订购日期。

于 2013-04-12T11:44:06.207 回答
0

在订购任何一组产品后订购任何产品的客户的 CustomerID 和最新 OrderDate
我怀疑它们是促销产品

SELECT [Order].[CustomerID], max([Order].[OrderDate])
FROM [Order]
JOIN [Order] as [OrderBase]
  ON [OrderBase].[CustomerID] = [Order].[CustomerID] 
 AND [OrderBase].[OrderDate]  < [Order].[OrderDate]
JOIN [OrderLine] 
  ON [OrderLine].[OrderID] = [OrderBase].[OrderID]
 AND [OrderLine].[ProductID] in (42,44,45,46,47,48)
GROUP BY [Order].[CustomerID]
于 2013-04-12T12:13:11.720 回答