セッションの長さを調べて、ユーザーが連続して数分間ログインした時間を確認しようとしています。問題は、セッションがアクティビティによって行に分割されることです。アクティビティの終了が次のアクティビティの開始と同じである場合、それらは同じセッションの一部であり、一緒に数える必要があります。sqlの複数の行で連続セッションをグループ化する
理想的には、それは次のようになり、私はACTIVITY_STARTとACTIVITY_ENDを持っているし、セッションを作成したいと思います:
ACTVITY_START | ACTIVITY_END | SESSION
----------------|-----------------|----------
2/16/2016 19:00 | 2/16/2016 20:51 | 1
2/16/2016 20:51 | 2/16/2016 20:52 | 1
2/16/2016 20:52 | 2/16/2016 20:54 | 1
2/16/2016 20:54 | 2/16/2016 21:25 | 1
2/16/2016 21:25 | 2/16/2016 21:26 | 1
2/16/2016 21:26 | 2/16/2016 22:13 | 1
2/16/2016 22:13 | 2/16/2016 22:14 | 1
2/16/2016 22:14 | 2/16/2016 22:41 | 1
2/18/2016 21:59 | 2/18/2016 23:07 | 2
2/18/2016 23:07 | 2/19/2016 0:00 | 2
2/19/2016 0:00 | 2/19/2016 1:56 | 2
2/19/2016 1:56 | 2/19/2016 1:58 | 2
2/19/2016 19:08 | 2/19/2016 20:53 | 3
2/19/2016 20:53 | 2/20/2016 0:00 | 3
2/20/2016 0:00 | 2/20/2016 0:05 | 3
2/20/2016 0:05 | 2/20/2016 2:00 | 3
2/20/2016 2:00 | 2/20/2016 2:12 | 3
2/20/2016 2:12 | 2/20/2016 2:28 | 3
2/20/2016 2:28 | 2/20/2016 2:32 | 3
2/20/2016 12:38 | 2/20/2016 14:16 | 4
2/20/2016 14:26 | 2/20/2016 14:27 | 5
もともと私がやったことは、同じ行の次の活動開始と活動終了までのラインでした:
SELECT DENSE_RANK() OVER (ORDER BY CASE WHEN A.ACTIVITY_END = B.ACTIVITY_START THEN 0 ELSE 1 END)
しかし、セッションが変更されると、すべてのセッションが常に別々にランク付けされます。
セッションを開始するたびにSESSIONが増分されるようにするにはどうすればよいですか?
はそれは申し訳ありませんが、Netezzaのデータベースです。 – user6745154
ドキュメントによると、Netezzaは 'lag'と' sum'ウィンドウ関数の両方をサポートしています。だから私の答えはうまくいくはずです。最悪の場合、構文の微妙な調整が必要な場合がありますが、一般的な考え方は良いはずです。 – sstan
私はいくつかの調整をする必要があったが、あなたの考えは完璧に働いた。ありがとう! – user6745154