我有一个用户特定的查询,需要为所有用户运行。
我正在努力思考如何用引用替换硬编码的 uuid,或者是否需要完全不同的方法?
select max(MaxDate), users.created_at
from (
select max(`moment`.`created_at`) as MaxDate
from `moment`
where `moment`.`user_uuid` = "7dd668af-241a-4176-a1da-f5689214b206"
union (
select max(`module`.`updated_at`) as MaxDate
from `module`
where `module`.`user_uuid` = "7dd668af-241a-4176-a1da-f5689214b206"
)
) as stuff, `users`
where `users`.`uuid` = "7dd668af-241a-4176-a1da-f5689214b206"
最终目标是获取用户的创建日期和同一用户上次更新内容的日期,然后获取它们之间的平均时间。但对于所有用户而不是单个用户。
最佳答案
这是一个通用查询,它将报告所有用户,按用户排序:
SELECT
u.user_uuid,
GREATEST(COALESCE(t1.max_created_at, t2.max_updated_at),
COALESCE(t2.max_updated_at, t1.max_created_at)) AS max_date
FROM users u
LEFT JOIN
(
SELECT user_uuid, MAX(created_at) AS max_created_at
FROM moment
GROUP BY user_uuid
) t1
ON u.user_uuid = t1.user_uuid
LEFT JOIN
(
SELECT user_uuid, MAX(updated_at) AS max_updated_at
FROM module
GROUP BY user_uuid
) t2
ON u.user_uuid = t2.user_uuid
ORDER BY
u.user_uuid;
如果您想限制为单个用户,您仍然可以通过 WHERE
子句或针对一组用户的 WHERE IN
子句来实现。
请注意,您的数据库设计有点奇怪,因为您的用户信息分布在多个表中。我的回答假设通常每个用户都会出现在两个表中,但情况可能并非如此。
关于Mysql - 对所有用户运行用户查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52852365/