0

Time と Login の 2 つの列を含むテーブルがあり、ユーザーが 1 日のうちにいつ電話をかけたかを示しています。

ユーザーごとに、特定の日の最初の呼び出しと最後の呼び出しの間の分単位の時間としてセッションの長さが計算される、最大、最小、および平均のセッションの長さを見つける必要があります。

テーブル:

Time                Login
2012-05-29 20:01:26 A
2012-05-29 20:01:40 A
2012-05-29 20:02:27 A
2012-05-29 20:58:46 A
2012-05-29 20:59:50 A
2012-05-29 21:00:12 A
2012-05-29 21:00:36 A
2012-05-30 21:28:28 A
2012-05-30 21:29:08 A
2012-05-30 21:29:13 A
2012-05-30 21:29:25 A
2012-04-06 10:25:24 A
2012-04-06 10:25:53 A
2012-04-06 10:26:35 A
2012-04-27 12:05:45 A
2012-04-27 12:06:06 A

望ましい出力は次のようになります。

MaxSession Login
59         A

前述のように、MinSession と AverageSession には同じ出力が必要です。

私は何時間も完全に立ち往生しており、これを行う方法がまったくわかりません。

私が達成したことは、ログインごとに一意のアクティブな日数を取得することです。ただし、次のステップを達成する方法がわかりません。

  • 1 日あたりのログインごとに最初のエントリを取得する
  • 1 日あたりのログインごとに最後のエントリを取得する
  • SessionLength として、ログインごとに 1 日あたりの最後のエントリと最初のエントリの差を分単位で計算します
  • ログインごとの最大、最小、および平均 SessionLength を選択します

どんな種類の助けにもとても感謝しています!

4

1 に答える 1

2

これを試して

日ごとにグループ化

Select Login,Date(Time) As LoginDay,Max(Time) As LastLogin,Min(Time) As FirstLogin,Count(*) As Logins,

From LoginsTable
Group By Login,Date(Time)
Order By LoginDay,Login

「時刻」などの列は「 」で囲んでください

最大、最小、平均セッション

    Select Login,Max(SessionMinutes) As MaxSessoin,Min(SessionMinutes) As MinSession,
    Avg(SessionMinutes) From
    (
        Select Login,
        LoginDay,LastLogin,FirstLogin,TotalLogins,Hour(DateDiff(LasTLogin-FirsTLogin))*60 + Minute(DateDiff(LasTLogin-FirsTLogin)) As SessionMinutes
        From
        (
            Select Login,Date(Time) As LoginDay,Max(Time) As LastLogin,Min(Time) As FirstLogin,Count(*) As Logins,
            From LoginsTable
            Group By Login,Date(Time)
        ) As Temp
    ) As Temp1

現在、分を計算する際に秒を無視しています。

于 2012-06-22T13:25:03.107 に答える