2016-11-28 64 views
0

我想寫一個查詢,其中檢索每個用戶的名稱,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 
.... 

回答

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 
0

一個選項是UNION您的兩個日期表在一起。這可以在JOIN之前或之後完成。我個人會UNIONJOINING之前,因爲它是在我的腦海和簡單寫作。

請原諒SQL Server-esque語法。

以前JOIN ING:

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 ING:

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 
相關問題