0

特定の時点での株式の価値を計算できる方法を探しています。

この例では、特定の月の株式の償還を計算して報告する必要があります。

確認する必要がある 3 つのテーブルがあります。

  1. 償還日、償還された株式数、および株式の種類を含む償還テーブル。

  2. 共有タイプを持ち、1 番目と 3 番目のテーブルをリンクする共有タイプ テーブル。

  3. 株式の種類、評価日、価値を持つ株価テーブル。

だから私がしなければならないことは、月ごとに分類された株式の価値を報告し、株式償還の数に基づいて計算することです.

それは理にかなっていますか?

よろしくお願いします。

申し訳ありませんが、誤解が生じている可能性があるため、もう少し詳しく説明する必要があると思います。これは日々変化する株や株数を計算するためのものではなく、資金管理のためのものです。これが意味することは、株価は月単位でのみ変化し、通常は 1 か月遅れることです。

この結果、クエリで実行する必要があるのは、償還の日付を見て、日付、つまり月と年を計算することです。次に、株価表を見て、指定された日付の株価がある場合 (これは 1 日であるため、計算する必要があります。つまり、価格は y 日に x でした)、単位数にこの値を掛けます。ただし、特定の日付の株価がない場合は、その特定の株式タイプの最終価格を使用してください。

うまくいけば、これがもう少し明確になるかもしれませんが、これを簡単にするために提供できる情報が他にある場合は、お知らせください。情報を提供します.

よろしく、

フィル

4

4 に答える 4

0

これでうまくいくはずです(注:ShareTypeでグループ化するように更新されました):

SELECT
   ST.ShareType,
   RedemptionMonth = DateAdd(month, DateDiff(month, 0, R.RedemptionDate), 0),
   TotalShareValueRedeemed = Sum(P.SharePrice * R.SharesRedeemed)
FROM
   dbo.Redemption R
   INNER JOIN dbo.ShareType ST
      ON R.ShareTypeID = ST.ShareTypeID
   CROSS APPLY (
      SELECT TOP 1 P.*
      FROM dbo.SharePrice P
      WHERE
         R.ShareTypeID = P.ShareTypeID
         AND R.RedemptionDate >= P.SharePriceDate
      ORDER BY P.SharePriceDate DESC
   ) P
GROUP BY
   ShareType,
   DateAdd(month, DateDiff(month, 0, R.RedemptionDate), 0)
ORDER BY
   ShareType,
   RedemptionMonth
;

Sql Fiddle で動作することを確認してください

これは、テーブルに条件を指定して WHERE 句を追加するだけで簡単にパラメーター化できRedemptionます。償還がなかった月の株式タイプに 0 を表示する必要がある場合は、お知らせください。回答を改善します。ユース ケース シナリオを少し記入し、正確に説明していただけると助かります。何を入力し、何を出力として見たいか。

また、注意してください: ここでは、株式償還の価格が常に存在すると想定しています。その償還がその株価よりも前に存在する場合、その償還は除外されます。

于 2013-04-08T17:19:34.753 に答える
0

あなたの質問を理解したら、次のようなクエリが必要です

select shares.id, shares.name, sum (redemption.quant * shareprices.price)
from shares 
inner join redemption on shares.id = redemption.share
inner join shareprices on shares.id = shareprices.share
where redemption.curdate between :p1 and :p2
order by shares.id
group by shares.id, shares.name

:p1 と :p2 は日付パラメータです

于 2013-04-08T12:41:42.187 に答える
0

毎日の評価がある場合、計算は単純な結合とそれに続く集計です。結果のクエリは次のようになります。

select year(redemptiondate), month(redemptiondate),
       sum(r.NumShares*sp.Price) as TotalPrice
from Redemptions r left outer join
     ShareType st
     on r.sharetype = st.sharetype left outer join
     SharePrice sp
     on st.sharename = sp.sharename and r.redemptiondate = sp.pricedate
group by year(redemptiondate), month(redemptiondate)
order by 1, 2;
于 2013-04-08T12:40:26.613 に答える