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, которое раздвоит выбранный адрес поставщика. затем присоединиться и выполнить задание