2013-04-12 77 views
1

我有一个customerids,orderids和订单日期的列表,我想在另一个查询中使用它来确定客户是否自该日期起再次订购。为每个客户ID选择最后一个订单日期

示例数据:

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)) 

如果你有什么事,只问。

更新::

该查询带回的结果如上图所示

需要知道,如果客户已再次从上述订购的产品之一在查询后下令,任何产品标识。 。

迈克

+0

什么是你想要的输出? –

+0

我想他想要某个客户的最后日期订单 – Elior

+0

我已更新我的问题... – MichaelEaton

回答

0

如果你只在最后订购日期为每个客户

select customerid, max(orderdate) from theTable group by customerid; 
感兴趣
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 

获取客户的最新订单。

1

CTEROW_NUMBER应该工作:

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 

DEMO

(我省略的加入,因为是不需要从其他表列,只需添加它)

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] 
相关问题