2

我有一个表,其中(除其他外)有字段 dateawarded、beltcolor 和用户 ID(用户 ID)。

Beltcolor 是 'varchar',dateawarded 是 'date',userid 是 int。

该数据代表学生获得各种颜色腰带(巴西柔术)的日期。

我想确定的是皮带之间的平均时间/在给定皮带上花费的平均时间。

由于紫色排在蓝色之后,如果我想找出花在蓝色上的平均时间,我想我需要做的是:

对于每个拥有紫色腰带的用户 ID(并非所有人都已经变成紫色),取蓝色腰带的授予日期和紫色腰带的授予日期,并计算它们之间的时间。将所有时间加起来除以被发现达到紫带的人数。

你能帮我做一个 SQL 查询吗?

谢谢!肖恩

4

2 回答 2

0

这是一个查询紫色和蓝色之间平均天数的查询。您可以使其适应其他情况:

SELECT AVG(datediff(a.dateawarded,b.dateawarded)) as Average
FROM beltsTable a
INNER JOIN beltsTable b ON a.userid = b.userid
WHERE a.beltcolor = "purple" AND b.beltcolor = "blue"

sqlfiddle demo

这只会考虑同时拥有两条腰带的用户。如果用户只有蓝带,则不会考虑在内。

于 2013-11-01T11:51:10.603 回答
0

首先,您应该找到当前皮带的上一个皮带日期(请参阅内部查询),然后只计算每种皮带颜色的当前日期和上一个日期之间的天数。

SQLFiddle 演示

select beltcolor,
       FLOOR(AVG(DATEDIFF(dateawarded,Prev_dateawarded))) as Days_to_reach

from
(

select beltcolor,dateawarded,id,
COALESCE((select MAX(dateawarded) from T
        where id=T1.id 
              and dateawarded<T1.dateawarded) 
  ,dateawarded)
as Prev_dateawarded 
from T as T1
) As T2        

group by beltcolor
于 2013-11-01T12:12:47.450 回答