Sql server 计算单个表中紧跟在其他行之后的行,这两个行都受到where子句的限制

Sql server 计算单个表中紧跟在其他行之后的行,这两个行都受到where子句的限制,sql-server,sql-server-2014,Sql Server,Sql Server 2014,我正在使用SQL Server 2014 我有一个包含数百万个事件的表。主键由三列组成: 时间日期时间 用户bigint 上下文varchar50 我有另一列的值为nvarcharmax 我需要数一数被限制的行数 上下文='somecontext'和值='value2' 接下来的时间行限制在 上下文='somecontext'和值='value1' 对于同一用户 例如,使用以下记录: 时间用户上下文值 2019-02-22 14:56:57.710 359586015014836某些上下文值1

我正在使用SQL Server 2014

我有一个包含数百万个事件的表。主键由三列组成:

时间日期时间 用户bigint 上下文varchar50 我有另一列的值为nvarcharmax

我需要数一数被限制的行数

上下文='somecontext'和值='value2'

接下来的时间行限制在

上下文='somecontext'和值='value1'

对于同一用户

例如,使用以下记录:

时间用户上下文值

2019-02-22 14:56:57.710 359586015014836某些上下文值1


2019-02-22 15:13:42.887 359586015014836 somecontext value2如果我在评论中给出的示例是您想要的,那么您可以使用以下代码 假设要选择上下文为'c1',当前值为'v1',下一个值为'v3'的所有行(如果按时间排序):


你所说的按时间限制排在后面是什么意思?是否要计算按用户按时间顺序筛选的20000101,1,'somecontext',value1'和20000102,1,'somecontext',value2'之间没有行的行数?我已更新了我的问题。更清楚吗?就是这样。非常感谢。上一个限制中有一个输入错误,下一个_值应为“v3”:
declare @t table
(
    Time_ DateTime,
    user_ bigint,
    context varchar(50),
    value_ varchar(50)
);

insert into @t values
('20000101', 1, 'c1', 'v1'),
('20000102', 1, 'c2', 'v3'),
('20000103', 1, 'c1', 'v3'),
('20000104', 2, 'c1', 'v1'),
('20000105', 2, 'c1', 'v4'),
('20000106', 2, 'c1', 'v2');

with cte as
(
select *, 
       lead(value_) over(partition by user_ order by time_) as next_value
from @t
where context = 'c1' 
)

select *
from cte
where next_value = 'v3';