Mysql - 对所有用户运行用户查询

标签 mysql

我有一个用户特定的查询,需要为所有用户运行。

我正在努力思考如何用引用替换硬编码的 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/

相关文章:

PHP函数显示从最高分到用户时间戳的排名

mysql - Laravel5 : Eloquent and JOIN

php - 可行性 : Auto-tweet on Update of a page

mysql - 非常慢的 TRUNCATE 伴随着 httpd 日志上的 "Server seems busy"

mysql - 无法连接到安装在其他虚拟机上或通过网络安装的 MySQL

mysql - 排名查询中如何实现分页?

mysql - 如何为数据库中创建的所有表设置默认排序规则?

MySQL:提取一个数字,该数字位于两个表之一中

mysql - 如何在mysql中只返回唯一值

c# - 当尝试使用Task.Run()在MySql中运行插入查询时,它抛出以下异常: "Unable to connect to any of the specified MySQL hosts."