【问题标题】:How to join tables based on the dates如何根据日期连接表
【发布时间】:2013-11-28 05:20:04
【问题描述】:

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 表根据产品 ID 和日期记录佣金百分比。
  • Order 表基本上是特定日期下订单的记录,

我想加入两张桌子并根据订单日期带来适当的佣金。例如,您可以看到第一个订单的佣金是 27.00,因为 product_id 1 的日期介于 20110101 和 20120101 之间。

我该怎么做?看似简单的一对一关系,但我想不通。

【问题讨论】:

  • 想要的结果日期有错别字吗?
  • 是的。谢谢你让我知道。固定。
  • 我相信您想要的输出,20130402 上 product_id 2 的佣金应该是 18.00 而不是 16.00

标签: sql sql-server-2008 join


【解决方案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演示

【讨论】:

    猜你喜欢
    • 2020-02-17
    • 2018-09-23
    • 2022-07-25
    • 1970-01-01
    • 2020-01-07
    • 2020-04-05
    • 2022-11-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多