【发布时间】:2014-12-04 20:30:38
【问题描述】:
下面是我用来计算用户平均会话持续时间的代码。
SELECT
tbl.create_Date
,HourOfDay
,HourOfDay_AMPM
,AVG(TIMESTAMPDIFF(SECOND, tbl.minDt, tbl.maxDt))/60 AS Duration_mins
FROM (SELECT
i.session_id,
i.createDate,
DATE(CONVERT_TZ(i.createDate, '+00:00', '-04:00')) as create_Date,
HOUR(CONVERT_TZ(i.createDate, '+00:00', '-04:00')) as HourOfDay,
DATE_FORMAT(CONVERT_TZ(i.createDate,'+00:00','-04:00'), '%l%p') as HourOfDay_AMPM,
min(i.createDate) minDt,
max(i.createDate) maxDt,
(max(i.createDate) - min(i.createDate) )/60 as Duration
FROM impressions i
WHERE i.createDate >= current_date
AND HOUR(CONVERT_TZ(i.createDate, '+00:00', '-04:00')) >=9
AND HOUR(CONVERT_TZ(i.createDate, '+00:00', '-04:00')) < 22
AND i.session_Id <> ''
GROUP BY i.session_id
HAVING Duration > 0
ORDER BY i.createDate, i.session_id
) as tbl
GROUP BY tbl.create_DATE, tbl.HourOfDay
ORDER by tbl.create_Date
注意,数据库中的时区是 UTC,我需要以 EST 显示结果,这就是我使用 convert_TZ 命令的原因。
问题:我运行 inner 查询并将原始数据粘贴到 Excel 中,生成数据透视表并得到以下结果
Hour Avg_duration_mins
9AM 14.43
10AM 59.17
11AM 24.55
12PM 12.69
2PM 1.27
但是,按原样运行整个查询会给我以下结果
Hour Avg_duration_mins
9AM 6.98
10AM 18.78
11AM 9.40
12PM 7.49
2PM 1.21
经过手动检查,excel结果准确且有意义。为什么 SQL 会发疯?我感觉问题出在AVG 函数和max 和min 的聚合上。
更新:对于表格展示次数,同一session_id 可以有多个条目
session_id | createDate | actions |
023awv 2014-10-09 12:02 some action
023awv 2014-10-09 12:12 some action
023awv 2014-10-09 12:22 some action
023awv 2014-10-09 12:32 some action
011awv 2014-10-09 12:42 some action
023awv 2014-10-09 12:42 some action
023awv 2014-10-09 12:52 some action
023awv 2014-10-09 12:53 some action
052brw 2014-10-09 13:02 some action
023awv 2014-10-09 13:05 some action
023awv 2014-10-09 13:06 some action
023awv 2014-10-09 13:08 some action
023awv 2014-10-09 13:12 some action
我想以每小时/每天为单位获取每个会话的平均持续时间。
任何帮助将不胜感激。
【问题讨论】:
-
会话时长为 70 分钟。应该计入 12:00 桶还是 13:00 桶?查询的方式本质上是随机选择。
-
这是一个很好的观点,我也遇到了问题。我认为它会选择会话的开始时间并将其存储在该插槽中。
-
@Laurence:如果你能帮助我重新开始,我将不胜感激。我觉得自己已经够糊涂了。如果你要这样做,你会怎么做?我觉得
AVG函数没有计算我认为它应该计算的值。运行内部查询,我得到了正确的每小时槽数行数,并且我觉得按 HOUR 对其进行分组将使平均值能够在该小时级别上获取。我错了吗? -
我已经更新了答案。
-
按照建议运行查询;我仍然得到同样的错误结果。
标签: mysql sql excel timestamp average