Sql server 2008 SQL SERVER根据条件生成行号
我有一个表,其中包含UserID、DIFFTIME列。当我从表中选择这些列时,我还希望有一个派生列,即:如果DiffTime大于20,我希望增加每个用户id的计数 例如,如果该表具有:Sql server 2008 SQL SERVER根据条件生成行号,sql-server-2008,Sql Server 2008,我有一个表,其中包含UserID、DIFFTIME列。当我从表中选择这些列时,我还希望有一个派生列,即:如果DiffTime大于20,我希望增加每个用户id的计数 例如,如果该表具有: User ID DIFF TIME 1 0 1 5 1 10 2 0 2 21 2 5 我想要一个类似这样的结果集: User ID DIFF TIME SESSION NUMBER 1 0
User ID DIFF TIME
1 0
1 5
1 10
2 0
2 21
2 5
我想要一个类似这样的结果集:
User ID DIFF TIME SESSION NUMBER
1 0 1
1 5 1
1 10 1
2 0 1
2 21 2
2 5 2
我如何做到这一点
非常感谢您的想法和建议 使用以下语句:
select t1.User_Id, t1.Diff_Time,
isnull(count(t2.User_Id), 0) + 1 as Session_Number
from @table t1
left join @table t2
on t1.User_Id = t2.User_Id
and t1.eventTime >= t2.eventTime
and t2.Diff_Time > 20
group by t1.User_Id, t1.Diff_Time, t1.eventTime
order by t1.User_Id, t1.eventTime
(用实际表名替换@table
)
注意:我假设您表格的第五行在Diff\u Time
列中有值21,并且问题中有一个拼写错误,正如@AaronBertrand在评论中指出的那样使用以下语句:
select t1.User_Id, t1.Diff_Time,
isnull(count(t2.User_Id), 0) + 1 as Session_Number
from @table t1
left join @table t2
on t1.User_Id = t2.User_Id
and t1.eventTime >= t2.eventTime
and t2.Diff_Time > 20
group by t1.User_Id, t1.Diff_Time, t1.eventTime
order by t1.User_Id, t1.eventTime
(用实际表名替换@table
)
注意:我假设表的第五行在
Diff\u Time
列中有值21,并且问题中有一个输入错误,正如@AaronBertrand在注释中指出的那样这是表中仅有的两列吗?我想你还需要点别的东西来命令。查询无法判断0发生在5之前,5发生在10之前。您预期输出中的21也是一个输入错误吗?@Aaron:我的另一列是eventTime..Nope 21不是一个输入错误…如果difftime大于20,则递增计数。21代表计数?在原始数据中,20不代表时间吗?您想增加会话号还是增加时间?我在这里显然迷路了。@Aaron:如果差异时间>20,则增加会话数的计数。希望我已经说清楚了。哇,真是浪费了很多时间。现在,也许你应该重温一下你问过的58个问题中的一些,然后投票选出一两个答案?你不可能接受了超过一半的答案(仍然不是一个好的比例),但没有发现一个答案有帮助或值得投票。这个网站上满是试图帮助你的志愿者,你至少可以用你的支持票来奖励他们(这不会让你付出任何代价)。这是表格中仅有的两列吗?我想你还需要点别的东西来命令。查询无法判断0发生在5之前,5发生在10之前。您预期输出中的21也是一个输入错误吗?@Aaron:我的另一列是eventTime..Nope 21不是一个输入错误…如果difftime大于20,则递增计数。21代表计数?在原始数据中,20不代表时间吗?您想增加会话号还是增加时间?我在这里显然迷路了。@Aaron:如果差异时间>20,则增加会话数的计数。希望我已经说清楚了。哇,真是浪费了很多时间。现在,也许你应该重温一下你问过的58个问题中的一些,然后投票选出一两个答案?你不可能接受了超过一半的答案(仍然不是一个好的比例),但没有发现一个答案有帮助或值得投票。这个网站上满是试图帮助你的志愿者,你至少可以用你的支持票来奖励他们(这不会让你付出任何代价)。@AaronBertrand我认为这是一个拼写错误,正如你指出的那样。我在第五行的值为21
的表上测试了这一点。OP刚刚评论说第一个表中的20是一个拼写错误,应该是21。据我所知,这给出了正确的结果。@AaronBertrand我认为这是一个打字错误,正如你所指出的。我在第五行的值为21
的表上测试了这一点。OP刚刚评论说第一个表中的20是一个拼写错误,应该是21。据我所知,这给出了正确的结果。