Как присоединиться к столу на основе дат

COMMISSION таблица

PRODUCT_ID   DATE       COMMISSION
1           20110101       27.00     
1           20120101       28.00
1           20130705       30.00
2           20110101       17.00
2           20120501       16.00
2           20130101       18.00
...

ORDER таблица

PRODUCT_ID   DATE        PRICE
1            20110405      2500
2            20130402      3000 
2            20130101      1900

Желаемый результат

PRODUCT_ID      DATE      PRICE       COMMISSION
1             20110405    2500         27.00
2             20130402    3000         16.00
2             20130101    1900         18.00
  • Commission таблица записывает комиссию в % на основе идентификатора продукта и даты.
  • Order таблица в основном представляет собой запись заказов, размещенных на определенную дату,

Я хотел бы объединить два стола и внести соответствующую комиссию в зависимости от даты заказа. Например, вы можете видеть, что комиссия за первый заказ составляет 27,00, поскольку дата для product_id 1 находится между 20110101 и 20120101.

Как мне это сделать? Похоже на простое отношение 1 к n, но я не могу понять это.


person l46kok    schedule 28.11.2013    source источник
comment
есть ли опечатки в желаемых датах результатов?   -  person Albert Laure    schedule 28.11.2013
comment
да. Спасибо, что дал мне знать. Фиксированный.   -  person l46kok    schedule 28.11.2013
comment
Я считаю, что в желаемом вами результате комиссия для product_id 2 на 20130402 должна быть 18.00 вместо 16.00   -  person peterm    schedule 28.11.2013


Ответы (1)


Пытаться

SELECT o.*,
(
  SELECT TOP 1 commission
    FROM commission
   WHERE product_id = o.product_id
     AND date <= o.date
   ORDER BY date DESC
) commission
  FROM [order] o 

Вот демонстрация SQLFiddle.

person peterm    schedule 28.11.2013