SQL:如何比较SQL Server中的连续行
我有一个包含按客户代码分组的事务记录的表 典型的表类似于客户端、事务类型、日期和结果 我需要找到一种特殊类型交易的有效性 例如 如果在第1天发送了短信息,并且在发送短信息的4个工作日内有积极结果,则可以将其视为有效短信息 样本表: 预期产出: 如何将单个记录与特定客户机代码上的所有事务进行逐行比较 提前谢谢 使用分组方式并存在 编辑:替代解决方案SQL:如何比较SQL Server中的连续行,sql,sql-server,Sql,Sql Server,我有一个包含按客户代码分组的事务记录的表 典型的表类似于客户端、事务类型、日期和结果 我需要找到一种特殊类型交易的有效性 例如 如果在第1天发送了短信息,并且在发送短信息的4个工作日内有积极结果,则可以将其视为有效短信息 样本表: 预期产出: 如何将单个记录与特定客户机代码上的所有事务进行逐行比较 提前谢谢 使用分组方式并存在 编辑:替代解决方案 select d1.client, d1.[sms count], d2.[eff sms count] from
select d1.client,
d1.[sms count],
d2.[eff sms count]
from (
select client,
count(*) [sms count]
from data
where ttype = 'sms'
group by client
) d1
join
(
select client, count(*) [eff sms count]
from data t
where ttype = 'sms' and exists(
select 1
from data h
where h.client = t.client and
h.day between t.day and t.day + 4 and
h.outcome = 'pos'
)
group by t.client
) d2 on d1.client = d2.client
对于这两种解决方案,应提供以下索引
data(ttype, client)
data(outcome, client, day)
试试这个:-
select CLIENT,
SUM(case when isnull(A.TTYPE,'') <> '' THEN 1 END) SMS_Count ,
SUM( case when isnull(A.TTYPE,'') <> '' and A.DAY <= 4 THEN 1 END) EFF SMS COUNT
from a inner join b on a.Client on b.client and a.TTYPE = b.TTYPE
GROUP BY CLIENT
在2600条客户记录和26k条记录中进行了尝试。我已经跑了将近一个小时了。还有其他选择吗?@SudharsanRajesh现在检查一下。别忘了创建索引。工作起来很有魅力。必须创建临时表,然后创建索引,因为我是通过视图从另一个数据库获取数据的。
select CLIENT,
SUM(case when isnull(A.TTYPE,'') <> '' THEN 1 END) SMS_Count ,
SUM( case when isnull(A.TTYPE,'') <> '' and A.DAY <= 4 THEN 1 END) EFF SMS COUNT
from a inner join b on a.Client on b.client and a.TTYPE = b.TTYPE
GROUP BY CLIENT