2016-11-28 7 views
0

各ユーザーの名前、ID、最終更新日を取得するクエリを作成したいと思います。以下のクエリは、UserDetails1とUserDetails2テーブルから名前、ID、最終更新日を取得します。このクエリで最大日付を選択するにはどうすればよいですか?

どのようにしてこのクエリを変更して、1つの日付値、どちらの詳細テーブルの特定の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

1つのオプションは一緒にあなたの2つの日付のテーブルをUNIONすることです。これは、JOINの前後に行うことができます。私は個人的にはUNIONの前にJOINING私の心の中でもっと簡単に書いています。

SQL Serverエスク構文を使用してください。

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 

ING JOIN

関連する問題