我有一个由ClientID,ActionDate,Action和Result组成的表。MS SQL如何选择最后N个记录相同的客户端
我需要选择具有特定日期范围内的特定操作/结果组合的不同客户端。
举例说明:
- 我需要不同的clientId,其最近5动作/结果是呼叫/无应答。
- 我需要在过去30天内只有Call/NoAnswer的独特clientID。
感谢
我有一个由ClientID,ActionDate,Action和Result组成的表。MS SQL如何选择最后N个记录相同的客户端
我需要选择具有特定日期范围内的特定操作/结果组合的不同客户端。
举例说明:
感谢
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
你试过这么远吗? – 2015-03-31 12:27:35
表的主键是什么?此外,最后5包括或不包括这? – 2015-03-31 12:34:52
我有麻烦设置“Where”子句。如果我将其设置为特定的操作/结果,它只会计算这些操作。我应该建立的查询逻辑并没有在我的脑海中清理。 也许有几个子选择,它们会选择Top1,Top2-Top1,Top3-(Top2-top1)等,它们应该都是相同的。我相信有更优雅的方式,但我太新手了,能够弄清楚。 – Peraklo 2015-03-31 12:39:48