我有两个表,表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
答案 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版本,您可以使用lag
或lead
来简化此操作。如果您对CTE感到不舒服,可以使用临时表来应用相同的逻辑。