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
私の好みは、コードにロジック を書き続けることができるように、ループを使用することです。