Как усреднить значения в одной таблице на основе условия, включающего другую таблицу в SQL? - PullRequest
0 голосов
/ 26 мая 2020

У меня две таблицы. Один определяет временные интервалы (начало и конец). Временные интервалы не равны по длине. Другой содержит идентификатор продукта, дату начала и окончания продукта.

TableOne: 
Interval   StartDateTime             EndDateTime
202020201  2020-01-01 00:00:00       2020-02-10 00:00:00
202020202  2020-02-10 00:00:00       2020-02-20 00:00:00 

TableTwo
ProductID  ProductStartDateTime      ProductEndDateTime
ASSDWE1    2018-01-04  00:12:00      2020-04-10  20:00:30
ADFGHER    2020-01-05  00:11:30      2020-01-19  00:00:00
ASDFVBN    2017-10-10  00:12:10      2020-02-23  00:23:23  

Мне нужно вычислить среднюю длину продуктов из TableTwo, которые существовали в течение временных интервалов, определенных в TableOne. Если продукт существовал в течение временного интервала из TableOne, то длина продукта в течение этого временного интервала определяется как длина с момента его начала до конца временного интервала.

Я пробовал следующее

select 
a.*,
(select  
  AVG(datediff(day, b.ProductStartDateTime, IIF (b.ProductEndDateTime> a.EndDateTime, a.EndDateTime 
  ,b.ProductEndDateTime))) --compute average length of the products
  FROM #TableTwo b
   WHERE ( not (b.ProductEndDateTime <=  a.StartDateTime ) and not (b.ProductStartDateTime >=  a.EndDateTime) ) 
        -- select products that existed during interval from #TableOne
                     ) as AverageProductLength

from #TableOne a

Я получаю ошибку "Multiple columns are specified in an aggregated expression containing an outer reference. If an expression being aggregated contains an outer reference, then that outer reference must be the only column referenced in the expression."

Результат, который я хочу:

   Interval   StartDateTime             EndDateTime         AverageProductLength
    202020201  2020-01-01 00:00:00       2020-02-10 00:00:00    23 
    202020202  2020-02-10 00:00:00       2020-02-20 00:00:00    34.5

Есть ли способ сделать усреднение?

...