投票結果を取得するためのクエリを作成しようとしています。
誰かが行ったすべての投票を記録する表があります。人々が複数回投票することは可能ですが、最後の投票のみを考慮に入れる必要があります。
「ユーザーの最後の投票のみを考慮に入れる必要がある」部分を除いて、私はそれが機能する時点にいます。
これは私のテーブルです:
テーブル投票:
id bigint PK
TimeStamp datetime
QuestionId int
UserId int
およびLinqクエリ:
var total = (float)(_db.Votes).Count(vote => vote.Timestamp>=startWeekDay && vote.Timestamp<endWeekDay);
var results = (from vote in _db.Votes
where vote.Timestamp >= startWeekDay && vote.Timestamp < endWeekDay
group vote by new { vote.QuestionId} into g
orderby g.Count() descending
select new VoteResults()
{
QuestionID = g.Key.QuestionId,
Percentage = (g.Count() / total * 100.0f),
}).ToList();
私の質問:ユーザーごとの最後の決定票のみが考慮されるように、このクエリを変更するにはどうすればよいですか?
編集:この入力を考えると:
{
UserId = 1,
QuestionId = 2,
TimeStamp = Yesterday
},
{
UserId = 1,
QuestionId = 1,
TimeStamp = Today
},
{
UserId = 2,
QuestionId = 2,
TimeStamp = Yesterday
},
{
UserId = 3,
QuestionId = 1,
TimeStamp = Yesterday
}
出力は次のようになります。
{
QuestionID = 2,
Percentage = 33.3333
},
{
QuestionID = 1,
Percentage = 66.66666
}