如何在此查询中选择最大日期?

时间:2016-11-28 18:01:35

标签: mysql

我想编写一个查询,检索每个用户的名称,ID和上次修改日期。下面的查询给出了UserDetails1和UserDetails2表中的名称,id和最后修改日期。

如何修改此查询以返回单个日期值,即任一详细信息表中给定user_id的最大日期?

SELECT
    id,
    name,
    MAX(userdetails1.date_modified),
    MAX(userdetails2.date_modified)
FROM User user
INNER JOIN UserDetails1 userdetails1
    ON userdetails1.user_id = user.id
INNER JOIN UserDetails2 userdetails2
    ON userdetails2.user_id = user.id


User
id | name
---------
1  | name1
2  | name2
3  | name3

UserDetails1
user_id | date_modified
---------------------
1   | 2016-11-28 16:28:26
....

UserDetails2
user_id | date_modified
---------------------
1   | 2016-11-29 16:29:26
....

2 个答案:

答案 0 :(得分:1)

试试这个,虽然我认为可以采用更优化的方式来编写它。

SELECT
    id,
    name,
    (CASE 
        WHEN MAX(userdetails1.date_modified) > MAX(userdetails2.date_modified) 
        THEN MAX(userdetails1.date_modified)
        ELSE MAX(userdetails2.date_modified)
    END) 
FROM User user
INNER JOIN UserDetails1 userdetails1
    ON userdetails1.user_id = user.id
INNER JOIN UserDetails2 userdetails2
    ON userdetails2.user_id = user.id
GROUP BY id, name

答案 1 :(得分:0)

一个选项是将UNION两个日期表放在一起。这可以在JOIN之前或之后完成。我个人会在UNION之前JOINING,因为我的想法和写作都比较简单。

请原谅SQL Server-esque语法。

JOIN之前:

SELECT
    u.id,
    u.name,
    MAX(d.date_modified) last_modified

FROM [User] u
    INNER JOIN 
        (
        SELECT user_id, date_modified
        FROM UserDetails1

        UNION ALL

        SELECT user_id, date_modified
        FROM UserDetails2
        ) d
        ON u.id = d.user_id

GROUP BY u.id, u.name

JOIN之后:

SELECT 
    id, 
    name, 
    max(date_modified) last_modified

FROM
    (
    SELECT
        u.id, u.name, d.date_modified
    FROM [User] u
        INNER JOIN UserDetails1 d
        ON d.user_id = user.id

    UNION ALL

    SELECT
        u.id, u.name, d.date_modified
    FROM [User] u
        INNER JOIN UserDetails2 d
        ON d.user_id = u.id
    )

GROUP BY id, name