2

この日付以降に顧客が再度注文したかどうかを判断するために、別のクエリで使用したい顧客 ID、注文 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))

他に何か必要な場合は、お尋ねください。

アップデート::

このクエリは、上記の結果を返します

上記のクエリで製品の 1 つを注文した後、製品 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
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 に答える
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 に答える
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 に答える