Помогите составить 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
→ Ссылка