В SQL Server 2008 я хочу объединить две таблицы в зависимости от последовательности дат. Более конкретно, мне нужно налево присоединиться Payments
таблицы Profiles
таблицу по следующим правилам:Соедините две таблицы в зависимости от последовательности дат
UserId
должно быть согласовано.Каждая запись в
Payments
соответствует записи вProfiles
с ближайшимProfiles.CreationDate
передPayments.PayDate
.
Для упрощенного примера,
Table Payments:
UserId PayDate Amount
1 2012 400
1 2010 500
2 2014 600
Table Profiles:
UserId CreationDate Address
1 2009 NY
1 2015 MD
2 2007 NJ
2 2013 MA
3 2008 TX
Desired Result:
UserId CreationDate PayDate Amount Address
1 2009 2010 500 NY
1 2009 2012 400 NY
2 2013 2014 600 MA
Это гарантирует, что пользователь имеет по крайней мере 1 Profiles
запись, прежде чем он платит. Другое ограничение заключается в том, что я не уполномочен ничего писать в базе данных.
Я идея первая оставила присоединиться Payments
с Profiles
, то в записи группы, соответствующей каждому (UserId, PayDate)
кортежа, сортировки по CreationDate
, затем выберите последнюю запись. Но я не знаю, как реализовать его на языке SQL, или есть ли какие-либо лучшие способы сделать это слияние?
это очень плохой дизайн базы данных ... КОСМИЧЕСКОГО ОТНОСИТЬСЯ с TOP 1 запись с ORDER BY DATEDIFF – mxix