как найти запись между датой диапазона - PullRequest
2 голосов
/ 14 декабря 2011

у меня есть эти таблицы:

таблица 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

Мне нужно вычислить новый итог на основе умножения поля total из table 1, с полем value из table 2. Table 2 сохраняйте изменения в стоимости валюты и не является непрерывной датой, поэтому я не могу понять, как объединить эти таблицы, чтобы получить свою цель


Изменить дизайн

Я думал о том, чтобы изменить дизайн таблицы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

Тогда я мог бы объединить table1 и table2 без использования "external apply", но сейчас пытаюсь сделать запрос на добавление этого нового поля

Спасибо !!

Ответы [ 2 ]

1 голос
/ 14 декабря 2011

Вы можете использовать подзапрос 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 голосов
/ 14 декабря 2011

что-то вроде ниже (я не проверял это):

SELECT *,total*value as Total
FROM Table1 INNER JOIN (SELECT idCurrency,max(date) as value
GROUP BY idCurrency,date)
ON table1.idcurrency = table2.currency
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...