SQL如果在类似日期找不到数据,则获取最后日期

时间:2012-11-15 13:23:25

标签: sql sql-server

我有一张像这样的表[Price]

  

日期项目价格

1-1-2012 Potion 500
1-1-2012 Elixir 5000
1-10-2012 Potion 600

[Transaction]

  

日期项目金额

     

1-1-2012药水1
      1-5-2012药水1

我需要加入这些表格,价格和交易并排。规则是如果在[价格]中找不到日期,请使用最新价格

所以,1-5-2012 Potion将花费500美元

结果应该是这样的

  

日期项目金额价格

     

1-1-2012药水1 500
      1-5-2012药水1 500

所以,我不知道该怎么做,如果您知道解决方案,请提供帮助。 感谢

2 个答案:

答案 0 :(得分:2)

一个简单的SCALAR SUBQUERY就可以了。

select t.date, t.item, t.amount,
       (select top(1) price
          from price
         where t.item=p.item and p.date <= t.date
      order by p.date desc) price
  from [transaction] t;

答案 1 :(得分:0)

这应该有效:

 SELECT 
    t.Date, 
    t.Item, 
    t.Amount,
    ISNULL(
       p.Price, 
       (
          SELECT TOP 1 p1.Price FROM [Price] p1 
          WHERE p1.Item = t.Item 
          ORDER BY Date DESC
       ) [Price]
 FROM 
     [Transaction] t 
     LEFT OUTER JOIN
         [Price] p
         ON 
         t.Date = p.Date
         AND
         t.Item = p.Item