我正在尝试在 SQL Server 2008/TSQL 中运行某种循环,但我不确定这应该是 aWHILE
还是CURSOR
两者。最终结果是我试图遍历用户登录列表,然后确定唯一用户,然后运行循环以确定用户在网站上停留 5 分钟所需的访问次数,按频道划分.
表:登录历史
UserID Channel DateTime DurationInSeconds
1 Website 1/1/2013 1:13PM 170
2 Mobile 1/1/2013 2:10PM 60
3 Website 1/1/2013 3:10PM 180
4 Website 1/1/2013 3:20PM 280
5 Website 1/1/2013 5:00PM 60
1 Website 1/1/2013 5:05PM 500
3 Website 1/1/2013 5:45PM 120
1 Mobile 1/1/2013 6:00PM 30
2 Mobile 1/1/2013 6:10PM 90
5 Mobile 1/1/2013 7:30PM 400
3 Website 1/1/2013 8:00PM 30
1 Mobile 1/1/2013 9:30PM 200
我可以select
像这样将唯一用户放入一个新表中:
SELECT UserID
INTO #Users
FROM LoginHistory
GROUP BY UserID
现在,我正在尝试开发的功能是遍历这些唯一的 UserID,按 DateTime 对登录进行排序,然后计算达到 300 秒所需的登录次数。
我希望得到的结果集如下所示:
UserID TotalLogins WebsiteLogins MobileLogins Loginsneededto5Min
1 4 2 2 2
2 2 2 0 0
3 3 3 0 3
4 1 1 0 0
5 2 1 1 2
如果我用另一种语言执行此操作,我会认为它会是这样的:(并道歉,因为这不完整,只是我想我要去的地方)
for (i in #Users):
TotalLogins = Count(*),
WebsiteLogins = Count(*) WHERE Channel = 'Website',
MobileLogins = Count(*) WHERE Channel = 'Mobile',
for (i in LoginHistory):
if Duration < 300:
count(NumLogins) + 1
** 好的 - 我在嘲笑自己结合多种不同语言/语法的方式,但这就是我正在考虑解决这个问题的方式**
想到一个好的方法来实现这一点?我的偏好是使用循环,这样我就可以继续将if/then
逻辑写入代码。