2016-05-07 35 views
0

に2つの日付の間のフィールドの平均を取得し、表Aは、今年の毎日と当時のそれぞれのレートフィールドの日付フィールドを持ちます。表Bには特定の日付のリストがあります。表Bの最初の日付の表Aのレートフィールドと表Bの2番目の日付のレートフィールドの平均を取得し、次に表Bの2番目の日付と3番目の日付の平均レート、そうです。私は2つのテーブルを持っている別のテーブル

ここまでは私の試みです。

あなたが行削除する必要が
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

:Tran_DateはNULL IS:

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 
+0

こんにちは、実際には、その日付の平均ではなく、2つの日付間の平均が必要です。 –

0

いつでも唯一平均二つの数字ですので、このような何かをする方が簡単かもしれません。

すでに順次あなたのテーブルにIDが割り当てられている場合 row_numberは不要です
; 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 

注意。

最初の部分はBの日付のそれぞれに対するレートを取得し、第二の部分は、行の速度と速度はすぐに、次のことを接続し、平均彼ら。

SQL Serverのバージョンによっては、lagまたはleadで簡略化することができます。 CTEに不快な場合は、代わりに一時テーブルを使用して同じロジックを適用できます。

関連する問題