2012-01-18 58 views
2

我一直在試圖編寫一個查詢,該查詢返回數據庫中不同行之間的平均時間差。基本上,這與基於數字存儲記錄的表格有關。確定列是RSP_TRM_IRN,並且針對RSP_TRM_IRN中的不同值存儲每個後續條目的時間戳。下面的示例表格顯示了數據的結構。現在我希望它根據RSP_TRM_IRN中的唯一值返回表中每個條目的平均時間差。模式也在下面。數據庫中行之間的日期時間差異

模式:

"RSP_IRN" type="bigint" width="8" 
"RSP_DATETIME" type="timestamp" width="8" 
"RSP_TRM_IRN" type="bigint" width="8" 

樣本數據,以證實它是如何分佈的:

RSP_TRM_IRN  RSP_DATETIME 
93  2011-11-09 13:18:32 
101 2011-11-03 11:49:10 
7  2011-11-08 02:32:28 
101 2011-11-14 16:48:43 
108 2011-11-17 09:00:49 
5  2011-10-12 09:30:28 
213 2011-11-17 13:47:23 
108 2011-11-17 07:18:15 
7  2011-11-07 06:43:49 
159 2011-11-21 06:49:25 
5  2011-11-16 07:10:58 
104 2011-11-03 15:17:39 
108 2011-11-15 23:34:58 
5  2011-11-22 09:38:02 
108 2011-11-13 13:28:32 
7  2011-10-26 00:07:26 
100 2011-11-14 14:27:02 
5  2011-11-14 21:56:05 
7  2011-10-25 12:11:17 
145 2011-11-21 15:26:17 
5  2011-10-10 11:23:53 

請幫助任何人。嘗試使用PHP的這一點,但將不得不周圍循環,這可能會使邏輯更復雜。我試圖使用上面的數據來實現的是獲得RSP_TRM_IRN = 5的時間之間的平均時間差。

+0

假設這是MySQL的? – Yuck 2012-01-18 17:14:40

+0

@ Stun101:您的示例數據看起來不符合您的表格結構。 – 2012-01-18 17:17:04

+0

@MarkBannister看起來像它對我來說......列沒有按照相同的順序列出,並且不包括'RSP_IRN',否則它們匹配。 – Yuck 2012-01-18 17:18:55

回答

2

由於所有的週期都是連續的,所有你需要知道的是time of the first event,time of the last eventnumber of discrete periods

平均值是(完成 - 開始)/期間。根據您使用的SQL方言,(完成 - 開始)可以採用多種不同的形式(例如SQL Server中的DATEDIFF() ...)。

現在,這裏是如何派生你需要的信息。

SELECT 
    RSP_TRM_IRN, 
    COUNT(*) - 1   AS periods, 
    MIN(RSP_DATETIME) AS start, 
    MAX(RSP_DATETIME) AS finish 
FROM 
    yourTable 
GROUP BY 
    RSP_TRM_IRN 

然後SQL Server會用...

DATEDIFF(SECOND, MIN(RSP_DATETIME), MAX(RSP_DATETIME))/(COUNT(*) - 1) AS Average_Period_Length