gpt4 book ai didi

mysql - 获取 2 个时间戳之间的平均值,需要将一个日期与最近的日期进行比较

转载 作者:行者123 更新时间:2023-11-29 15:39:45 25 4
gpt4 key购买 nike

希望有人能帮我解决一个 SQL 小问题。

我有一组具有注册日期和事件日期的用户,它们可以有多个值。这些列中的每一列分别位于不同的表、用户和事件中。

我需要减去 2 个日期,即注册日期和最近的事件日期。然后我希望能够对表中所有用户减去的日期进行平均。我只想查看 TIMEDIFF >= 90 的用户的 AVG

我尝试使用 MAX(activity_date),如

SELECT activity.user_id, AVG(TIMESTAMPDIFF (day,users.reg_ts, SELECT 
MAX(activity.actvy_ts FROM activity))) AS LifetimeAVG
FROM activity JOIN users
ON activity.user_id = users.user_id
WHERE TIMESTAMPDIFF (day,users.reg_ts, activity.actvy_ts) >= 90
GROUP BY activity.user_id
;

但它会引发组错误。

ERROR: ER_INVALID_GROUP_FUNC_USE: Invalid use of group function

最佳答案

您不能在另一个聚合函数 AVG() 中使用一个聚合函数 MAX(),因为这对于特定“组”没有任何意义。

相反,您需要在内部子查询级别 ( Derived Table ) 执行第一级聚合 (MAX),然后使用结果集进行进一步聚合 (平均值):

SELECT Avg(dt.max_diff) AS LifetimeAVG
FROM (SELECT u.user_id,
Timestampdiff (day, u.reg_ts, Max(a.actvy_ts)) AS max_diff
FROM activity AS a
JOIN users AS u
ON u.user_id = a.user_id
GROUP BY u.user_id, u.reg_ts
HAVING max_diff >= 90) AS dt

关于mysql - 获取 2 个时间戳之间的平均值,需要将一个日期与最近的日期进行比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57807064/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com