2013-02-15 23 views
7

これは、3つのフィールドがあるとします。username, start_date, end_date3つのフィールドでグループ化された2つの日付の平均の差異?

複数のレコードを開始および停止します。たとえば、bobが開始して2つのレコードを停止したとします。

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 

私は(だけでなく、行ごとに、ユーザによってすなわちグループ)各ユーザのために、時間で、かかる平均時間(すなわち、差分開始と終了との間)を知る必要があります。

私はdiff、平均ANDグループをどうやって行うのかについて頭を悩ますことはできませんか?どんな助け?

答えて

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関数は、最初のパラメータを変化させることにより、年までの任意の時間単位で差分を測定することができますss、mi、hh、dd、wk、mmまたはyyとすることができます。

+0

日 - – Viehzeug

+0

@Viehzeug秒 – Bohemian

+0

うわー、[OK]を、私が想像よりも簡単のために溶液を添加IIRC日は、日数に差を返します。私はそれが必要だったよりも私の頭の中でより複雑にしていたと思います。 –

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

ありがとう、本当にすばらしい助けをありがとう。残念ながら、私は2つの答えをチェックすることはできません。 –