2015-03-31 3 views
0

У меня есть таблица, которая состоит из ClientID, ActionDate, Action и Result.MS SQL Как выбрать клиентов, где последние N записей одинаковы

Мне нужно выбрать отдельных Клиентов, которые имеют ТОЛЬКО конкретную комбинацию действий/результатов в заданном диапазоне дат.

Для иллюстрации:

  1. мне нужен отчетливый clientIDs, чьи последние 5 Действия/Результат является вызов/NoAnswer.
  2. Мне нужны разные клиентские идентификаторы, у которых есть ТОЛЬКО ЗВОНОК/NoAnswer за последние 30 дней.

Благодаря

+2

, что вы пробовали до сих пор? –

+0

Что такое первичный ключ таблицы? Кроме того, последние 5 включительно или исключая это? –

+0

У меня проблемы с настройкой положения «Где». Если я установлю его на конкретное действие/результат, он будет считать только эти действия. Логика запроса, которую я должен настроить, не проясняется в моей голове. Возможно, у вас есть несколько подвыборов, которые будут выбирать Top1, Top2-Top1, Top3- (Top2-top1) и т. Д., Которые должны быть одинаковыми. Я уверен, что есть более элегантный способ, но я слишком новичок, чтобы понять это. – Peraklo

ответ

2

1.

select ClientID from 
(
select 
    ClientID, 
    Action, 
    Result, 
    row_number() over (partition by ClientID order by ActionDate desc) as num 
from ClientActions 
) T -- the latest 5 action/result 
where rnum <= 5 
group by ClientID 
having MAX(case when Action='Call' and Result = 'NoAnswer' then 0 else 1 end) = 0 

2.

select ClientID 
from ClientActions 
where DATEDIFF(DAY, ActionDate, GETDATE()) <= 30 
group by ClientID 
having MAX(case when Action='Call' and Result = 'NoAnswer' then 0 else 1 end) = 0 
+0

Первый работает как шарм, спасибо. Я должен проанализировать его сейчас и попытаться понять его полностью, для дальнейшего использования. Что касается второго, это потребует клиентов, у которых есть только последнее действие, верно? Что делать, если я хочу, чтобы все действия за последний месяц были Call/NoAnswer? Думаю, мне нужно было бы удалить MAX? – Peraklo

+0

@Peraklo, второй запрос с MAX должен принимать Клиентов, у которых все действия за последний месяц равны Call/NoAnswer. вы можете легко протестировать его – ASh

Смежные вопросы