java - 在多个表中执行选择查询后删除重复数据

标签 java mysql sql

我有三个表 [users,projects,scenarios] 我需要根据 modified Date 列获取最新的更新项目详细信息,不包含重复值

表格是:

users Table :

enter image description here

project table

enter image description here

scenario Table

enter image description here

我尝试下面的查询,但如果我使用 group by 它返回重复值,然后旧值出现但我需要最新值

没有按查询分组

SELECT
    p.`PROJECT_NAME`,
    p.`CREATED_DATE`,
    s.`MODIFIED_DATE`
FROM
    `projects` p
JOIN `scenarios` s ON
    s.`PROJECT_ID` = p.`PROJECT_ID`
WHERE
    P.`USER_ID` =(
    SELECT
        USER_ID
    FROM
        users
    WHERE
        EMAIL = 'test@gmail.com'
)
ORDER BY
    s.`MODIFIED_DATE`
DESC

输出: enter image description here

按查询分组:

SELECT
    p.`PROJECT_NAME`,
    p.`CREATED_DATE`,
    s.`MODIFIED_DATE`
FROM
    `projects` p
JOIN `scenarios` s ON
    s.`PROJECT_ID` = p.`PROJECT_ID`
WHERE
    P.`USER_ID` =(
    SELECT
        USER_ID
    FROM
        users
    WHERE
        EMAIL = 'test@gmail.com'
)
group by p.PROJECT_NAME
ORDER BY
    s.`MODIFIED_DATE`
DESC

输出:enter image description here

最佳答案

您可以使用子查询分别获取每个项目的最新场景,然后如果需要,结果行将再次连接以获取其他列。

SELECT  p.PROJECT_NAME,
        p.CREATED_DATE,
        s.MODIFIED_DATE
        -- all columns in s.* will have the latest row
FROM    projects p
        INNER JOIN scenarios s
            ON  p.PROJECT_ID = s.PROJECT_ID
        INNER JOIN
        (
            SELECT  project_ID, MAX(modified_date) MAX_modified_date
            FROM    scenarios
            GROUP   BY project_ID
        ) t ON s.project_ID = t.project_ID
                AND s.modified_date = t.MAX_modified_date
        INNER JOIN users u
            ON P.USER_ID = u.USER_ID
WHERE   u.EMAIL = 'test@gmail.com'
ORDER   BY s.MODIFIED_DATE DESC

但是,如果不需要获取其他列,可以直接使用MAX()GROUP BY

SELECT  p.PROJECT_NAME,
        p.CREATED_DATE,
        MAX(s.MODIFIED_DATE) AS MAX_MODIFIED_DATE
FROM    projects p
        INNER JOIN scenarios s
            ON  p.PROJECT_ID = s.PROJECT_ID
        INNER JOIN users u
            ON P.USER_ID = u.USER_ID
WHERE   u.EMAIL = 'test@gmail.com'
GROUP   BY p.PROJECT_NAME,
            p.CREATED_DATE
ORDER   BY MAX_MODIFIED_DATE DESC

关于java - 在多个表中执行选择查询后删除重复数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48861291/

相关文章:

mysqlslap - [错误] 使用 cmd 中的 INSERT 查询时

mysql - 在具有 160M+ 行的 MySQL InnoDB 表上,选择查询非常慢

mysql - 从具有一对多关系的 3 个表中选择

sql - 使用索引器在 Azure 搜索服务中创建集合

sql - 环绕遗留 SQL Server 数据库的最佳 Ruby ORM?

java - 在Java中计算样本方差,但在插入相似数字时给出错误的答案

java - MethodHandle - 必须被捕获或声明为抛出。为什么会出现这个错误?

java - 从另一个框架获取值

java - JSoup 数据问题

sql - 与 VARCHAR() 相比,BLOB 或 TEXT 有多大区别?