2

私は、C# 実装と純粋な SQL 2005/2008 実装の使用に分かれています。最後のアクションのタイムスタンプに基づいて使用期間を判断する必要があります。私のテーブルには、「friendID」(uniqueIdentifier)と「lastAction」日時が含まれています。次に例を示します。

ボブ、午後 1 時
ボブ、午後 1 時 1 分
ボブ、午後 1 時 20 分
ボブ、午後 1 時 25 分
ジャック、午後 5 時
ボブ、午後 11 時 20 分

ユーザーが 60 分間非アクティブだった場合、ユーザーを「タイムアウト」させたいと考えています。提案が正しく機能する場合、上記のデータから 3 つの個別のセッションが存在するはずです。午後 1 時に開始されたボブのセッションと午後 11 時 20 分に開始されたセッションの間に長い休憩があります。

正しい結果は次のようになります: Bob (所要時間 25 分)、Jack (所要時間 0 分)、Bob (所要時間 0 分)

純粋な SQL または C# を使用して、これらの 3 行をどのように返しますか?

助けてくれてありがとう、それは本当にここで必要です。

4

3 に答える 3

1

純粋な SQL の例を次に示します。

セッションの開始時間のみが必要な場合:

    u、tを選択       
    テストAから        
    存在しない場所 (
      1を選択
      テストbから
      ここで、au = bu
      および bt >= at - '60 分'::間隔
      そしてところで

セッションの継続時間が本当に必要な場合:

    au、at、ctを選択
    テストa、テストcから
    存在しない場所 (
      1を選択
      テストbから
      ここで、au = bu
      および bt >= at - '60 分'::間隔
      と bt ct)
    そして au = cu
    そして
于 2008-12-22T02:36:09.663 に答える
0

セッションの最初のアクションの開始時刻を記録します。セッションの最後の時間も記録します。Globals.asax イベントを見てください。OnSessionEnd のようなものがあるはずです (正確なイベントを知っている人はコメントしてください)。このような場合は、開始時刻から最終時刻までの時間を記録してください。ASP.Net を使用していない場合は、WinForms に同等のイベントがあるはずです。

ここで、60 分のタイムアウトに対処する最も簡単な方法は、web.config で設定することです。それをしたくない場合は、これを処理するために現在の日付を保存するときに何らかのロジックが必要になります。同様に、新しい現在の日付が古い日付から 60 分以上離れている場合は、古い期間を記録してから、開始日と現在の日付を現在にリセットします。

于 2008-12-19T10:16:58.740 に答える