2011-12-14 91 views
2

我有这些表:如何找到一个范围的日期之间的记录

表1

date  | idcurrency | total 
2011-10-11 |  1  | 100 
2011-10-14 |  1  | 500 
2011-10-12 |  2  | 200 
2011-11-01 |  2  | 100 

表2

idcurrency | value | date 
     1  | 200 | 2011-10-09 
     1  | 350 | 2011-10-15 
     2  | 200 | 2011-10-09 
     2  | 250 | 2011-10-20 

我需要计算一个新总数根据字段的总和来自table 1 ,与table 2的字段的值Table 2保持了币值的变化,而不是日期continious,所以我无法弄清楚如何加入这些表格让我的目标


更改设计

我想在改变表2的设计,增添了新的领域,以保存范围的最后日期为货币价值,像这样:

idcurrency | value | start_date | end_date 
    1  200  2011-10-09  2011-10-14 
    1  350  2011-10-15  2011-12-14 
    2  200  2011-10-09  2011-10-19 
    2  250  2011-10-20  2011-12-14 

然后,我可以加入Table 1和Table不使用“外部应用”,但现在我试图做一个查询添加这个新领域

谢谢!!

+0

有什么你试过了吗?你有没有一个你认为应该可以工作的查询,但它没有? – 2011-12-14 14:35:21

+0

你是否可以控制表格的设计,还是固定? – dasblinkenlight 2011-12-14 14:37:05

回答

1

你可以使用一个子查询outer apply搜索的货币的最新值:

select t1.* 
,  last_value.Value * t1.total 
from Table1 t1 
outer apply 
     (
     select top 1 value 
     from Table2 t2 
     where t2.idcurrency = t1.idcurrency 
       and t2.date <= t1.date 
     order by 
       t2.date desc 
     ) last_value 
0

怎么样像下面的(我没有测试):

SELECT *,total*value as Total 
FROM Table1 INNER JOIN (SELECT idCurrency,max(date) as value 
GROUP BY idCurrency,date) 
ON table1.idcurrency = table2.currency 
相关问题