-1

顧客と注文日のリストがあり、30 日以内に少なくとも 2 回注文した顧客を見つけたいと考えています。

たとえば、顧客 12 が 2013 年 6 月 20 日に 1 つの製品を注文し、2013 年 1 月 7 日に別の注文をしたとします。顧客 12 を戻すクエリが必要です

ありがとう

4

3 に答える 3

1

このようなものは、自己結合を使用して必要なことを行う必要があります。顧客識別子が何であれ、インデックスを作成したい場合があります (この場合はcustomer_name) 。

SELECT DISTINCT o1.customer_name
FROM orders o1
JOIN orders o2
  ON o1.customer_name = o2.customer_name
 AND o1.id <> o2.id 
 AND ABS(DATEDIFF(day, o1.order_date, o2.order_date)) < 30

でテストする SQLfiddle

SQL Server 2012 を実行している場合、これによりパフォーマンスが向上する可能性があります。

WITH cte AS (
  SELECT customer_name, order_date od1,
       LAG(order_date) OVER (PARTITION BY customer_name ORDER BY order_date) od2
  FROM orders
)
SELECT DISTINCT customer_name 
FROM cte
WHERE DATEDIFF(day, od2, od1) < 30

別の SQLfiddle

于 2013-07-24T12:08:54.253 に答える
0
SELECT 
    customerid,
    count(*) 
FROM
    orderTable 
WHERE 
    orderDate between <startDate> and <endDate>
GROUP BY 
    customerid 
HAVING 
     count(*) >= 2
于 2013-07-24T12:00:08.920 に答える