Чтобы получить уникальных клиентов, которые совершили хотя бы один заказ за последние 30 дней, мы соединяем таблицу customers с таблицей orders и фильтруем по диапазону дат.
SELECT DISTINCT c.customer_id, c.name
FROM customers c
JOIN orders o ON c.customer_id = o.customer_id
WHERE o.order_date >= CURRENT_DATE - INTERVAL '30' DAY;
JOIN — связывает customers с orders по общей колонке customer_idWHERE фильтр — ограничивает результаты заказами за последние 30 дней, используя CURRENT_DATE - INTERVAL '30' DAYDISTINCT — гарантирует, что каждый клиент появится только один раз, даже если он совершил несколько заказовCURRENT_DATE - INTERVAL '30' DAY работает в MySQL и PostgreSQL; в SQL Server используй DATEADD(DAY, -30, GETDATE())DISTINCT — использование GROUP BY c.customer_id, c.name, которое может быть быстрее в некоторых СУБДorders.order_date и orders.customer_id для ускорения запросов на больших объёмах данныхКлючевое слово DISTINCT в этом запросе гарантирует, что клиенты, совершившие несколько заказов в течение 30 дней, появятся в результатах только один раз.
Новый — ещё не проверен сообществом
Вы