T-SQL - объединение таблицы транзакций с таблицей аудита

Скажем, у меня есть эти две таблицы:

Таблица транзакций

Pmt ID    VendorID      PaymentDate
 1             1        2017-10-01 00:14:42
 2             2        2017-09-03 00:08:23

Во второй таблице приведен список этих VendorID, и каждый раз, когда меняется соответствующая электронная почта. Это могло измениться множество раз.

Таблица аудита

VendorID       Email                CreateDateUTC
1              a@gmail.com          2016-01-01 17:51:08
1              b@gmail.com          2016-03-03 12:40:03
1              c@gmail.com          2017-01-10 03:40:04
2              li@gmail.com         2017-03-30 05:40:03

Изменить: Скажем так, это покажет, что любой платеж, который поступил на идентификатор поставщика 1 после 2016-01-01 17:51:08, но до 2016-03-03 12:40:03, был отправлен на a@gmail.com. Любой платеж, отправленный поставщику с идентификатором 1 после 2016-03-03 12:40:03, но до 2017-01-10 03:40:04, поступал на b@gmail.com. И что все, что было связано с идентификатором поставщика 1 после 2017-01-10 03:40:04, отправлялось по адресу c@gmail.com (если, конечно, в таблице аудита есть еще одна более свежая запись для поставщика 1).

Если я скажу - хотел бы знать каждую транзакцию, отправленную на электронную почту example@gmail.com, как я могу запросить это?

Я предполагаю, что я возьму таблицу транзакций, а затем присоединюсь к таблице аудита. Тогда хорошо, у нас есть каждая транзакция и электронная почта, на которую она пошла. Но как присоединиться только к правильному адресу электронной почты? Или я, может быть, думаю об этом совсем не так?

3 ответа

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

SELECT * FROM 
(
   SELECT VENDOR.*,Audit.Email,ROW_NUMBER() OVER(PARTITION BY 
           Vendor.VendorID ORDER BY DATEDIFF(D,CreateDateUTC, PaymentDate) DESC) RNo
   FROM Vendor LEFT OUTER JOIN Audit ON Vendor.VendorId =Audit.VendorId 
   WHERE PaymentDate > CreateDateUTC 
)T
WHERE RNo = 1

Нужна дополнительная информация, но, возможно, это будет работать?

select distinct t.PmtID, t.VendorID, t.PaymentDate
from tblTrans t
inner join tblAudit a
on t.VendorID = a.VendorID
where t.PaymentDate <= a.CreateDateUTC
and a.Email = 'a@gmail.com'
order by t.PaymentDate

Вы должны создать одного мастера поставщиков, в котором хранится только основной отдельный поставщик с уникальным идентификатором. Затем создайте контактную информацию о поставщике в подчиненной таблице. В ней добавьте более подробную контактную информацию для поставщика, созданного в мастер-файле, и в контактную информацию о поставщике также вставьте одно поле isPrimary, которое раздвоит выбранный адрес поставщика. затем присоединиться и выполнить задание

Другие вопросы по тегам