私は次の12ヶ月の平均を計算しようとしています。SQL - 次の12ヶ月の平均
私たちが見てみたい月間に依存ファクターを計算しています
365-DATEPART(dy,'2017-06-26')/365 & 1-365-DATEPART(dy,'2017-06-26')/365
私が指定した1つのDate_Monthのために所望の答えを得ることができた、まだ私はトリミングできるようにしたいと思いますそれをダウン(NULLを含むNULLを削除)&は、Date_Monthsの多数に適用することが可能になります。
Company_Id Sales Date_Year Date_Month NTMA_Factor Sales_Down Sales_Up NTMA_Sales
1 675.051 2014 2013-03-31 0.7534 675.051 NULL NULL
2 47946.200 2014 2013-03-31 0.7534 47946.200 50364.200 48542.4788000
2 50364.200 2015 2013-03-31 0.7534 50364.200 NULL NULL
3 6891.430 2014 2013-03-31 0.7534 6891.430 6917.450 6897.8465320
3 6917.450 2015 2013-03-31 0.7534 6917.450 NULL NULL
5 2190.140 2014 2013-03-31 0.7534 2190.140 2318.250 2221.7319260
5 2318.250 2015 2013-03-31 0.7534 2318.250 NULL NULL
Date_Monthsの大きなセットのためのSQLでこれを行う方法はあります:
ここでは、現在の出力がありますか?これまで
問合せ:
SELECT top 7
S.Company_Id
, S.Sales
, Y.Date_Year
, M.Date_Month
, N.NTMA_Factor
, (S.Sales) AS Sales_Down
, (LEAD(S.Sales, 1) OVER (Partition by S.Company_Id ORDER BY Y.Date_Year ASC)) AS Sales_Up
, ((S.Sales * N.NTMA_Factor) + (LEAD(S.Sales, 1) OVER (Partition by S.Company_Id ORDER BY Y.Date_Year ASC))*(1-NTMA_Factor)) As NTMA_Sales
FROM Sales AS S
INNER JOIN Date_Year AS Y ON Y.Date_Year_Id = S.Date_Year_Id
INNER JOIN Date_Month AS M ON M.Date_Month_Id = S.Date_Month_Id
INNER JOIN NTMA_Factor AS N ON N.Date_Month_Id = M.Date_Month_Id
where
Date_Year in (2014,2015, 2013) and Date_Month in ('2013-03-31');
私は、理想的にはこれがそう文オーバーリード&を変更することを意味(ことにより、よりDate_Monthsを見て作るとまったく同じ出力を持っていますが、NULL &を含む行を削除したいです彼らはちょうど今のように最初のものを取っていない)。また、Sales_Down & Sales_Up列を最後に削除したいのですが、これは問題ではないようです。
私はMicrosoft SQL Server Management Studioを使用しており、SQL内の機能は悲しいです。
ありがとうございます。
ありがとう、私はwhere句でコードを組み込みましたそれは私が個々の会社のために欲しいものを生み出すようですが、その一般的な方法を知っていますので、その下の行の値を取るのではなく、複数のDate_YearsとDate_Monthに同じ出力を適用しますか? (出力には、Date_Year = 2014が多くありますので、コードが間違った行をSalesの入力として翌年に受け取るため、これは機能しません) –
申し訳ありませんが、私たちはコメントを重ねました。 「一般化」するには、** PARTITION BY社を使用する必要があると思われます。**私が提供したドキュメントのリンクを参照してください。 LEAD/LAGを使用すると、定義した「パーティション」の新しい値ごとにLEAD/LAGが再開されます。それを試してみてください。 –