顧客と注文日のリストがあり、30 日以内に少なくとも 2 回注文した顧客を見つけたいと考えています。
たとえば、顧客 12 が 2013 年 6 月 20 日に 1 つの製品を注文し、2013 年 1 月 7 日に別の注文をしたとします。顧客 12 を戻すクエリが必要です
ありがとう
顧客と注文日のリストがあり、30 日以内に少なくとも 2 回注文した顧客を見つけたいと考えています。
たとえば、顧客 12 が 2013 年 6 月 20 日に 1 つの製品を注文し、2013 年 1 月 7 日に別の注文をしたとします。顧客 12 を戻すクエリが必要です
ありがとう
このようなものは、自己結合を使用して必要なことを行う必要があります。顧客識別子が何であれ、インデックスを作成したい場合があります (この場合は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
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
SELECT
customerid,
count(*)
FROM
orderTable
WHERE
orderDate between <startDate> and <endDate>
GROUP BY
customerid
HAVING
count(*) >= 2