0

アプリケーションは基本的な株式分析アプリです。

データセットは次のようになります。

`ABC、真、2012 年 9 月 21 日、101.34

ABC、偽、2012 年 9 月 21 日、202.45

CDE、真、2012 年 9 月 21 日、345.67

ABC、真、2012 年 9 月 22 日。456.78

` SQLはここにあります:

SELECT TickerCode, Australian from Stk_ClosingPrices group by TickerCode,
 Australian having count(*) >= @daysToAverageOver order by TickerCode 

結果として私が望むのは、最初の 2 つのフィールドによるグループ化と、各グループの数のカウントです。上記の場合、次のようになります。

ABC、真、2 ABC、偽、1 CDE、真、1

そして、Count > パラメータが渡されたものだけを返したいと思います。

アルゴリズムは 20 日間の移動平均を計算するため、英語のクエリは「データ レコードが 20 を超える株式のキーを教えてください」となります。

これは私が得た距離ですが、カウントを正しく取得できません。すべてのグループで常に同じです.

  var query = (from cp in this.ObjectContext.stk_ClosingPrices group cp by new {
       cp.TickerCode, cp.Australian
   }
   into grp
    select new {
       grp.Key.TickerCode, grp.Key.Australian,
       Count = grp.Distinct()
   }).ToList();

grp.Sum(Quantity)に似た例を見たことがありますが、それを .Count() 述語に再キャストできないようです。

どうもありがとう、

4

1 に答える 1

0

試す

var query1 = (from cp in this.ObjectContext.stk_ClosingPrices group cp by new {
   cp.TickerCode, cp.Australian
}
into grp
select new {
   grp.Key.TickerCode, grp.Key.Australian,
   Count = grp.Count()
});

var results = (from r in query where r.Count > 20 orderby r.TickerCode select r).ToList();

実際に次のようなSQLを生成します

SELECT TickerCode, Australian, Count
FROM (
    SELECT COUNT(*) AS Count, TickerCode, Australian
    FROM  Stk_ClosingPrices
    GROUP BY TickerCode, Australian
    ) AS t1
WHERE t1.Count > 20
Order By t1.TickerCode
于 2012-09-21T08:38:13.457 に答える