SQL Server: для каждой записи в таблице 1 найдите наиболее близкое соответствие в таблице 2 - PullRequest
0 голосов
/ 31 октября 2019

У меня есть 2 таблицы.

table1

date1, closingprice

table2

 date2, strikeprice, ask

Для каждой записи вТаблица 1, я хочу сопоставить на table1.date1 = table2.date2 - 4, чтобы найти table2.strikeprice, который является ближайшим к table1.closingprice, но где table1.closingprice > table2.strikeprice

Для каждой записи в table1, где дата соответствует датев table2 есть несколько записей в table2. Но меня интересует только 1 запись в table2 на основании вышеуказанного ограничения.

Я хочу table2.date2, strikeprice и спрашиваю у table2 в выходных результатах.

Я сопоставляю даты с использованием table1.date1 = DATEADD(DD, -4, table2.date2), и это прекрасно работает ...

Есть идеи, как сделать это максимально простым? Пояснения о том, что происходит, будут оценены. Я видел пример с CROSS APPLY, но он открыт для любого примера, который легко понять и почему он работает ....

Спасибо,

Дан

1 Ответ

0 голосов
/ 31 октября 2019

Вы можете join и использовать коррелированный подзапрос для фильтрации:

select t1.*, t2.strikeprice
from table1 t1
inner join table2 t2 
    on t1.date1 = dateadd(DD, -4, t2.date2)
    and t2.strikeprice = (
        select max(strikeprice)
        from table2 t22
        where t22.date2 = t2.date2
        and t22.strikeprice < t1.closingprice
    )

Это предполагает, что в table2(date2, strikeprice) нет дубликатов;в противном случае вы можете получить дубликаты в наборе результатов. Это предположение кажется совместимым с вашим вопросом.

...