2010-04-27 26 views
10

İki adet datetime sütununa sahip Oturumlar adlı bir masa var: başlangıç ​​ve bitiş.MySQL: Ortalama zaman farkları aldınız mı?

Her gün için (YYYY-AA-GG) birçok farklı başlangıç ​​ve bitiş zamanı olabilir (HH: ii: ss). Bu başlangıç ​​ve bitiş zamanları arasındaki tüm farkların günlük ortalamasını bulmam gerekiyor.

birkaç satır bir örnek verilebilir:

start: 2010-04-10 12:30:00 end: 2010-04-10 12:30:50 
start: 2010-04-10 13:20:00 end: 2010-04-10 13:21:00 
start: 2010-04-10 14:10:00 end: 2010-04-10 14:15:00 
start: 2010-04-10 15:45:00 end: 2010-04-10 15:45:05 
start: 2010-05-10 09:12:00 end: 2010-05-10 09:13:12 
... 

2010-04-10 için (saniye olarak) farklılıklar olacaktır:

50 
60 
300 
5 

2010-04- için ortalama 10, 103.75 saniye olur.

day: 2010-04-10 ave: 103.75 
day: 2010-05-10 ave: 72 
... 

Ben başlangıç ​​tarihine göre gruplandırılmış saat farkını alabilirsiniz ama ortalama almak için emin değilim: Ben böyle bir şey dönmek benim sorgu istiyorum. AVG işlevini kullanmayı denedim, ancak bunun yalnızca doğrudan sütun değerleri üzerinde çalıştığını düşünüyorum (başka bir toplu işlevin sonucu yerine).

SELECT 
    TIME_TO_SEC(TIMEDIFF(end,start)) AS timediff 
FROM 
    Sessions 
GROUP BY 
    DATE(start) 

her timediff ortalamasını almak için bir yolu var mı tarih grubunu başlatın:

Bu benim ne var? İşlevleri birleştirmek için yeniyim, belki bir şeyi yanlış anlamış olabilirim. Alternatif bir çözüm biliyorsanız, lütfen paylaşın.

Her zaman bunu ad hoc yapabilir ve PHP'de ortalama değeri hesaplayabilirim ancak MySQL'de yapmanın bir yolu olup olmadığını merak ediyorum, böylece bir grup döngüyü çalıştırmamaya çalışıyorum.

Teşekkürler.

cevap

15
SELECT DATE(start) AS startdate, AVG(TIME_TO_SEC(TIMEDIFF(end,start))) AS timediff 
FROM Sessions 
GROUP BY 
     startdate 
+0

Evet, işte, sorumu gönderdiğim anda anladım. Kendimi aptal hissediyorum. Çalışmamamın sebebi, AVG (timediff) yapıyordum ve sanırım ifadeyi doğrudan doğruya geçmeniz gerekiyor ve bir takma ad kullanamıyorsunuz. Teşekkürler. – nebs

1
SELECT DATE(start) AS startdate, SEC_TO_TIME(AVG(TIME_TO_SEC(TIMEDIFF((end,start))))) AS avgtimediff 
FROM Sessions 
GROUP BY DATE(start) 

Bu, bir önceki cevap numarasını veriyor süresi olarak ortalama verecektir.

İlgili konular