gpt4 book ai didi

内部连接的平均 MYSQL MIN

转载 作者:行者123 更新时间:2023-11-29 05:09:13 26 4
gpt4 key购买 nike

假设有两个表:

  • 事件
  • 用户

每个用户都可以拥有一个或多个事件。

每个事件只能由一个用户拥有。

我将以下查询放在一起以平均事件和用户的相应 created_at 时间戳之间的差异。

SELECT 
(
SELECT AVG(TIMESTAMPDIFF(DAY, users.created_at, events.created_at))
FROM users
INNER JOIN events
ON users.id = events.user_id
WHERE events.created_at IS NOT NULL
AND users.created_at IS NOT NULL
) AS "Difference between created_at of user and created_at of user's first event, averaged across all users."

但是,如何只包括第一个重叠部分,其中 event.created_at 的时间戳最低?我相信目前,代码会取每个时间戳和 created_at 之间的差异,并将它们取平均。我想要完成的是获取每个用户在他/她的第一个创建事件之间的差异,对数据库中的每个用户执行此操作,并对结果取平均值。

解决方案可能非常简单,但我无法提出有效的查询。

感谢任何帮助或建议!

最佳答案

我认为您将需要一个子查询来查找最早的事件,以便您在事件连接中获得一行...像这样吗?

SELECT AVG(TIMESTAMPDIFF(DAY, u.created_at, e.created_at))
FROM users u
INNER JOIN events e ON u.id = e.user_id
INNER JOIN
(
SELECT user_id, MIN(created_at) minDate
FROM events
GROUP BY user_id
) m
ON m.user_id = u.user_id AND e.created_at = m.minDate
WHERE e.created_at IS NOT NULL AND u.created_at IS NOT NULL

如果不清楚,我在那里所做的是采用您的原始联接,为每个用户提供所有事件,但是然后将其与每个用户的最早事件进行联接,所以我们最终只为每个用户一行谁有至少一个事件。

这可以简化,因为我们不需要首先加入事件,我们可以只加入针对该子查询的用户...

SELECT AVG(TIMESTAMPDIFF(DAY, u.created_at, m.minDate))
FROM users u
INNER JOIN
(
SELECT user_id, MIN(created_at) minDate
FROM events
GROUP BY user_id
) m
ON m.user_id = u.user_id
WHERE u.created_at IS NOT NULL

关于内部连接的平均 MYSQL MIN,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42487570/

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