Помогите составить SQL запрос для такой задачи
Есть таблица order.
id, customerId, createdAt
Пример данных:
ID: 5, customerId: 111, createdAt: 2022-07-01T10:44:22.000Z,
Как мне получить customerId всех пользователей, что совершили с 2022-06-01 по 2022-07-01 более 50 покупок. То есть, будет более 50 таких записей в таблице, где customerId равен 111, в этом временном промежутке.
с DISTINCT по customerId, чтобы убрать дубли.
Ответы (1 шт):
Автор решения: Yitzhak Khabinsky
→ Ссылка
Вот как это сделать в MS SQL Server. Вы можете изменить SQL для любой базы данных.
SQL
-- DDL и образец вставки данных, начало
DECLARE @tbl TABLE (ID INT IDENTITY PRIMARY KEY, customerId INT, createdAt datetime);
INSERT @tbl (customerId, createdAt) VALUES
(1, GETDATE()),
(1, GETDATE()),
(2, GETDATE()),
(2, GETDATE()),
(2, GETDATE()),
(2, GETDATE());
-- DDL и образец вставки данных, конец
DECLARE @start_date DATE = '2020-01-01'
, @end_date DATE = '2024-12-31';
SELECT customerId, COUNT(*) AS [Counter]
FROM @tbl
WHERE createdAt >= @start_date AND createdAt <= @end_date
GROUP BY customerId
HAVING COUNT(*) > 2; -- 50