如何在范围日期之间找到记录

时间:2011-12-14 14:32:31

标签: sql-server tsql date join

我有这些表格:

表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保持对货币值的更改并且不是日期连续,所以我无法弄清楚如何加入这些表来实现我的目标


更改设计

我在考虑更改table2的设计,添加一个新字段来保存货币值范围的最终日期,如下所示:

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

然后,我可以在不使用“外部申请”的情况下加入table1和table2,但现在我正在尝试进行查询以添加此新字段

谢谢!

2 个答案:

答案 0 :(得分: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

答案 1 :(得分: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