获取另一个表中两个日期之间的字段的平均值

时间:2016-05-07 19:06:05

标签: sql-server

我有两个表,表A有一年中每一天的日期字段和每个日期的费率字段。表B列出了某些日期。如何获得表A中表B中第一个日期和表B中第二个日期的费率字段的平均值,然后是表A中表B中第二个日期和第三个日期的平均费率,依此类推等等。

以下是我的尝试。

Select Tran_Date, avg(rate)
From [dbo].[10_Year_TBill_Rates] a
left join #cashwithrn b
on a.observation_date = b.Tran_Date
where Tran_Date is null
group by Tran_date

2 个答案:

答案 0 :(得分:0)

你必须删除行:其中Tran_Date IS NULL:

SELECT Tran_Date, ISNULL(AVG(rate), 0)
FROM [dbo].[10_Year_TBill_Rates] a
LEFT JOIN #cashwithrn b
ON a.observation_date = b.Tran_Date
GROUP BY Tran_date

答案 1 :(得分:0)

由于您在任何时候只能平均两个数字,因此可能更容易做到这样的事情:

; With CTE as (Select b.date
    , a.rate
    , row_number() over (order by b.date) as RN 
from TableB b
left join TableA a
on b.date = a.date)

Select a.date as Date1
    , b.date as Date2
    , (a.rate + b.rate)/2 as AverageRate from CTE a
left join CTE b
on a.rn + 1 = b.rn

请注意,如果您已经在表中按顺序分配了ID,则不需要row_number

第一部分检索B中每个日期的费率,第二部分将该费率与紧随其后的行的费率相关联,并对其进行平均。

根据您的SQL Server版本,您可以使用laglead来简化此操作。如果您对CTE感到不舒服,可以使用临时表来应用相同的逻辑。