sql date子查询获取最后一个

时间:2018-09-10 22:19:57

标签: sql sql-server sql-server-2008

尝试此SQL时出现错误“无法绑定”

SELECT 
    promotions.id_product, price.value
FROM 
    promotions
LEFT OUTER JOIN 
    (SELECT TOP 1 id_product, date, value
     WHERE date > promotions.date) AS price ON price.id_product = promotion.id_product

关于SQL ...我有两个表,我需要在促销运行时获得正确的价格(而不是最后的价格)...

餐桌促销

id_product  | DATE       | VALUE   | Finish_date  
1           | 2018-05-01 | 20      | 2018-06-03
1           | 2018-07-02 | 18      | 2018-08-01

价格表

id_product  | DATE       | VALUE
1           | 2018-04-01 | 30
1           | 2018-06-02 | 25 

1 个答案:

答案 0 :(得分:1)

具有join的子查询不能与from子句中的其他表相关。

相反,请使用outer apply

SELECT p.id_product, pr.value
FROM promotions p OUTER APPLY
     (SELECT TOP 1 pr.id_product, pr.date, pr.value
      FROM prices pr
      WHERE pr.id_produto = p.id_produto AND pr.date > p.date            
      ORDER BY pr.date DESC
     ) pr;

我添加了ORDER BY。大概您希望促销日期之后的“下一个”价格,而不是之后的任意价格。