我有一个customerid,orderid和订单日期的列表,我想在另一个查询中使用它来确定客户自此日期以来是否再次订购过。
示例数据:
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))
如果您还需要其他任何东西,请询问。
UPDATE ::
此查询会返回上面显示的结果
需要知道客户是否已再次订购,因为在订购上述查询中的某个产品后,对于任何产品ID ...
麦克
答案 0 :(得分:2)
在MS SQL中,您可以使用TOP 1,您还需要按订单日期列按降序排序。
见SQL Server - How to select the most recent record per user?
答案 1 :(得分: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
获取客户的最新订单日期。
答案 2 :(得分: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
(我省略了连接,因为不需要另一个表中的列,只需添加它)
答案 3 :(得分:0)
如果您只对每位客户的最后订单日期感兴趣
select customerid, max(orderdate) from theTable group by customerid;
答案 4 :(得分:0)
客户ID和最新订单,适用于订购任何产品后订购任何产品的客户
我怀疑它们是促销产品
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]