2013-02-15 124 views
7

所以说我们有3个字段,username, start_date, end_date两个日期之间的平均差异,按第三个字段分组?

用户启动和停止多条记录,例如下面bob已经启动和停止两条记录。

bob 1/2/13 11:00 1/2/13 13:00 
jack 1/2/13 15:00 1/2/13 18:00 
bob 2/2/13 14:00 1/2/13 19:00 

我需要知道花费的平均时间(即起点和终点之间的差异),以小时为单位,为每个用户(即组由用户,而不是仅仅为每行)。

我不知道如何做差异,平均和组?任何帮助?

回答

9

您不指定diff所需的粒度。这确实是在天:

select username, avg(end_date - start_date) as avg_days 
from mytable 
group by username 

如果你想要在几秒钟之差,使用datediff()

select username, avg(datediff(ss, start_date, end_date)) as avg_seconds 
... 

DATEDIFF可以测量任何时间单位了DIFF多年通过改变第一个参数,这可以是ss,mi,hh,dd,wk,mm或yy。

+0

日期 - 日期返回天差IIRC – Viehzeug 2013-02-15 13:28:50

+0

@Viehzeug加入溶液秒 – Bohemian 2013-02-15 13:31:56

+0

哇,好,简单的比我想象。猜猜我的脑子比想象的要复杂得多。 – 2013-02-15 13:43:57

2
SELECT username, AVG(TIMESTAMPDIFF(HOUR, start_date, end_date)) 
FROM table 
GROUP BY username 
+0

非常感谢您的帮助。不幸的是我不能选择两个答案。 – 2013-02-15 13:44:53