2009-11-24 4 views
4

У меня есть две таблицыSQL получать максимальную дату из двух таблиц

USER (one row per user) 

id,username,firstname,lastname,lastmodified 
1,johns, John,Smith, 2009-03-01 
2,andrews, Andrew,Stiller, 2009-03-03 


STUDIES (multiple rows per user) 

id,username,lastmodified 
1,johns, 2009-01-01 
1,johns, 2009-02-01 
1,johns, 2009-07-01 
2,andrews,2009-05-05 
2,andrews,2009-04-04 

Я хочу, чтобы пользователи детали и новые По дате из двух таблиц:

johns,John,Smith,2009-07-01 
andrews,Andrew,Stiller,2009-05-05 

Помощь?

ответ

10

Вам необходимо сочетание MAX и GREATEST функции здесь:

select u.username 
    , u.firstname 
    , u.lastname 
    , greatest(u.lastmodified,max(s.lastmodified)) 
    from USER u 
    , STUDIES s 
where s.id = u.id 
group by u.id 
    , u.username 
    , u.firstname 
    , u.lastname 
    , u.lastmodified 

MAX - для агрегации, БОЛЬШОЕ - для максимум двух значений.

+1

Если число байтов из таблицы пользователя, с помощью которого вы должны группе - было очень большим, тогда было бы более эффективно выполнять агрегирование таблицы исследований в режиме просмотра строки или подзапроса факторинга, а затем присоединиться к таблице пользователей. –

+0

Просто предостережение от GREATEST о том, что если какое-либо из значений равно null, вы получаете нулевой результат, тогда как max дает вам самое высокое значение, отличное от нуля –

0
SELECT MAX(Date) FROM Users u FULL JOIN Studies s ON u.Username=s.Username GROUP BY Username 
0

Что-то вроде этого

select username, max(lastmodified) from (
    select username, lastmodified from user 

    union all 

    select username, max(lastmodified) as lastmodified 
    from studies 
    group by username 
) s 
group by username 
0

Для тех, кто нуждается в простом прямом выборе:

select max(lastmodified) 
from (
    select max(lastmodified) as lastmodified from USER 
    union 
    select max(lastmodified) as lastmodified from STUDIES 
); 

Это позволит получить максимальную дату от USER затем макс даты ИССЛЕДОВАНИЙ, а затем он вернет максимальное значение 2. Также вы можете добавить, где предложение и некоторые условия для внутренних выборов, чтобы улучшить результат.

0

ВЫБРАТЬ MAX (updatedDate) в latestUpdated ОТ ( ВЫБОР updatedDate ИЗ аудио UNION ALL ВЫБОР updatedDate ИЗ видео ) Foo

Смежные вопросы