2012-12-21 100 views
0

我們已經含有一個MySQL表來跟蹤用戶會話開始&結束時間MySQL特定行OCCURENCES:選擇在其上計算平均

UserId  Start     End 
150392 2012-07-11 01:11:28 2012-07-11 01:17:36 
150392 2012-07-11 01:19:03 2012-07-11 01:23:47 
150393 2012-07-11 01:22:47 2012-07-11 01:38:15 
150051 2012-07-11 01:31:03 2012-07-11 01:36:07 
150393 2012-07-11 01:37:43 2012-07-11 01:56:41 
150392 2012-07-11 01:48:57 2012-07-11 01:54:23 

我希望能夠在這個基礎上獲取平均會話時間用戶進入我們系統的次數。爲了澄清,我想知道第一次進入系統時用戶的平均會話時間,第二次進入系統的平均會話時間等。因此,第一次在表格中出現用戶ID時,這就是用戶第一次會議;我們總結所有這些首次發生的會話時間併除以計數。然後針對第二次用戶標識出現次數執行相同操作,並獲取平均時間等。

以上表爲例,第三個會話的平均時間爲326秒,因爲只有一個用戶擁有第三個會話(userID 150392 ,最後一行)。

所以我在尋找的輸出是這樣的:

SessionCount AvgTime (seconds) 
1    540 
2    810 
3    326 

我希望是有道理的。任何建議將非常感謝!謝謝。

+0

請不要在多個網站上不交叉張貼問題。這已發佈在DBA.SE上 - http://dba.stackexchange.com/questions/30931/select-specific-table-row-occurences-on-which-to-calculate-an-average請選擇一個站點張貼您的問題。 – Taryn

+0

要清楚,你需要_that特定會話的平均時間index_,對於所有用戶來說......使用ROW_NUMBER()(或相關)函數會更容易。如果用戶有併發會話會發生什麼(但是他們得到了他們......)?還是應該嚴格按照「開始」? –

+0

@bluefeet我們可以將它從DBA.SE移動到這裏併合並它嗎? – bonCodigo

回答

1
SELECT SessionCount, AVG(duration) AS AvgTime FROM (
    SELECT COUNT(*) AS SessionCount, 
      TIMESTAMPDIFF(SECOND, t2.Start, t2.End) AS duration 
    FROM  my_table t1 
     JOIN my_table t2 
     ON t1.UserId = t2.UserId AND t1.Start <= t2.Start 
    GROUP BY t2.UserId, t2.Start, t2.End 
) t GROUP BY SessionCount 

見它sqlfiddle