2015-06-09 1 views
0

Я надеюсь, что смогу получить разъяснения относительно того, как лучше всего обращаться с данными, заданными правильно и эффективно.Запрос записей на основе столбца даты Key & MAX

Вот три запроса из трех разных таблиц, с которыми я работаю. Донор_ID является ключевым для таблиц, но, как вы можете видеть, есть несколько записей, связанных с каждым Donor_ID, причем столбец runid_gmt имеет разные даты.

В идеале я хотел бы использовать max (runid_gmt) для каждой записи - и присоединиться к таблицам EMAIL и ADDRESSES на Donor_ID, но только выбрать запись max (runid_gmt) в каждой из этих таблиц.

Я считаю, что это то, что мне нужно сделать, но не уверен. Любые предложения по решению этой проблемы?

SELECT donor_id, last_name, birthdate, runid_gmt FROM [dbo].TBL_DONORS where donor_id = '51999441' order by runid_gmt desc;

Donors

SELECT donor_id, city, state, zip, runid_gmt FROM [dbo].TBL_ADDRESSES where donor_id = '51999441' order by runid_gmt desc;

Addresses

SELECT donor_id, donor_email, runid_gmt FROM [dbo].TBL_EMAIL where donor_id = '51999441' order by runid_gmt desc;

Email

ответ

1

Попробуйте с row_number Функция окна:

select * from 
(select *, row_number() over(partition by donorid order by gmt desc) rn 
from donors) t1 join 

(select *, row_number() over(partition by donorid order by gmt desc) rn 
from addresses) t2 on t1.donorid = t2.donorid join 

(select *, row_number() over(partition by donorid order by gmt desc) rn 
from emails) t3 on t1.donorid = t3.donorid 
where t1.rn = 1 and t2.rn = 1 and t3.rn = 1 
+0

спасибо, что вам нравится. – MISNole