@bgood

Как вывести список клиентов с непрерывной историей за год?

Есть таблица "Transactions_info" в ней колонки (date_new, Id_check, ID_client, Count_products, Sum_payment)
Нужно вывести список клиентов с непрерывной историей за год (минимум 1 покупка в месяц), учитывая, что клиент может в 1 месяц сделать несколько покупок:
SELECT `ID_client` FROM transactions_info 
WHERE COUNT (MONTH(`date_new`))>=12
  • Вопрос задан
  • 108 просмотров
Пригласить эксперта
Ответы на вопрос 4
@Akina
Сетевой и системный админ, SQL-программист.
SELECT ID_client
FROM Transactions_info
WHERE date_new BETWEEN @first_day_of_period
                   AND @last_day_of_period
GROUP BY ID_client
HAVING COUNT(DISTINCT date_new) = DATEDIFF(@last_day_of_period, @first_day_of_period) + 1
Ответ написан
with MyClients as
( select [ID_client], count(distinct cast([date_new] as date)) UnqDays
from [Transactions_info]
where date_new > dateadd(day,-365,getdate()) -- берём транзакции за последние 365 дней
group by [ID_client]
)
select *
from MyClients
where UnqDays>=364 --Сегодняшний день пропускаем.
/*
для Microsoft SQL Server 2005+
*/
Ответ написан
@cicatrix
было бы большой ошибкой думать
SELECT ID_client FROM 
(SELECT
ID_client, LAG(date_new, 365, 0) OVER (PARTITION BY ID_client ORDER BY date_new) diffdate
FROM Transactions_info) calcdiff
WHERE diffdate > 0

sqlfiddle.com/#!18/902cf/40

Вместо 365 вот здесь: LAG(date_new, 365, 0) надо поставить кол-во требуемых непрерывных дней
Ответ написан
@bgood Автор вопроса
Вобщем сделал так
SELECT ID_client,
COUNT(DISTINCT month(date_new))>=12 AS month
FROM transactions_info
GROUP BY ID_client

но оно показывает всех клиентов, а нужно только тех кто >12, пробовал через WHERE

SELECT ID_client,
COUNT(DISTINCT month(date_new)) AS month
FROM transactions_info
WHERE month>=12
GROUP BY ID_client

но пишет, что month не существует.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы