2012-06-22 88 views
0

我有一個表有兩列時間和登錄,顯示當用戶在一天內先後派出呼叫。MySQL的:每記錄分組結果每

在每個用戶的基礎上,我需要找到會話長度作爲第一個呼叫,在任意一天的最後一次通話之間分鐘的時間來計算的最大,最小和平均會話時長。

表:

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。

我完全被卡住幾個小時,真的有不知道如何完成這件事。

我已經取得了什麼是讓獨特的活躍天數每登錄。 我只是無法弄清楚如何實現下一個步驟,不過,這將是:

  • 得到每登錄每天的第一項
  • 得到每登錄每天
  • 計算差值中的最後一項在最後一項 和SessionLength每天第一個條目每次登錄分鐘之間
  • 選擇最大值,最小值,以及每登錄平均SessionLenght

我禾非常感謝任何形式的幫助!

+0

OK我已經想通了如何讓每個登錄每天的第一項: '選擇 時間, 日期(時間)爲ActiveDay, 登錄 GROUP BY登錄,ActiveDay 有時間=最小值(時間); ' 但是它不與最大的如此比我在這一個多快的工作... – Nospez

回答

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 

計算分鐘時,目前忽略了秒數。

+0

+1;) –

+0

@OlivierCoilland感謝 –

+0

非常感謝! @Sudhakar然而,這不是對每個登錄的基礎是什麼呢?我應該更清楚地表明該表包含許多不同的登錄信息。 – Nospez