【发布时间】:2012-12-08 06:26:10
【问题描述】:
这是我的 mySQL 语句:
SELECT DATE(x.created_at), AVG(TIMEDIFF(y.created_at, x.created_at)/60/60)
FROM
(SELECT *
FROM events a
WHERE a.created_at > '12-10-10 12:12:12'
AND a.type = 'Started') x INNER JOIN
(SELECT *
FROM events a
WHERE a.created_at > '12-10-10 12:12:12'
AND a.type = 'Complete') y ON x.target_id = y.target_id
GROUP BY DATE(x.created_at)
ORDER BY DATE(x.created_at)
理想情况下,我试图获得每个日期的运行中位数。因此,对于每个日期,选择 created_at 列之间的时间差,并找到该日期所有值之间的中值 TIMEDIFF。依此类推,直到每个日期都有相应的complete。
作为一个较短的目标,我上面的代码块只是“平均”(因为我无法计算出中位数),每个日期的最后一个返回值,而不是所有日期的所有那个日期。
有任何提示、提示、答案吗?
【问题讨论】:
-
您正在按
DAYOFYEAR进行分组,但您选择的是DATE... 如果我们能看到events表的结构,我们也希望如此。 -
Events 表有一个
created_at和type列。我还删除了 group by 和 order by 语句,它仍然只会返回最后一个对象。 -
你能为此创建一个 SQL 小提琴吗? www.sqlfiddle.com
-
我会将您的组更改为 DATE(x.created_at)。或者更改您的选择以显示 DAYOFYEAR(x.created_at)。
-
嗯.. 我更新为反映
DATE而不是DAYOFYEAR但它仍然只提供该日期的最后一个返回对象的计算。在 sqlfiddle 上工作..
标签: mysql math median cumulative-sum