C.PaperId,IFNULL(B.PaperName,'') AS PaperName,C.Id AS Exam_Student_Id,C.ExamStatus,
C.GuestId,C.TotalScore,CASE WHEN C.ExamEndTime IS NOT NULL THEN TIMESTAMPDIFF(SECOND,C.CreateTime,C.ExamEndTime) ELSE 0 END AS ExamSecondTime,
CASE WHEN C.TotalScore >0 THEN (SELECT COUNT(0) FROM rb_examination_student s2 WHERE s2.TotalScore > C.TotalScore and s2.PublishId = C.PublishId) +1 ELSE -1 END AS MyRank,
(SELECT MAX(TotalScore) FROM rb_examination_student s2 WHERE s2.PublishId = C.PublishId) AS MaxScore
FROM rb_examination_student AS C
INNER JOIN RB_Examination_Publish AS A ON C.PublishId=A.Id
INNER JOIN rb_examination_paper AS B ON C.PaperId=B.PaperId
WHERE 1=1 and A.ExamineStatus=2 and B.ExamineStatus=2
");
if(query!=null)
{
if(query.Group_Id>0)
{
builder.AppendFormat(" AND A.{0}={1} ",nameof(RB_Examination_Publish_ViewModel.Group_Id),query.Group_Id);
}
if(query.GuestId>0)
{
builder.AppendFormat(" AND c.{0}={1} ",nameof(RB_Examination_Publish_ViewModel.GuestId),query.GuestId);
}
if(!string.IsNullOrEmpty(query.PaperName))
{
builder.AppendFormat(" AND B.{0} LIKE @PaperName ",nameof(RB_Examination_Publish_ViewModel.PaperName));
builder.AppendFormat(" AND a.{0} < '{1}' and a.{2} > '{1}' and c.{3}=1 ",nameof(RB_Examination_Publish_ViewModel.ExamStartTime),DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"),nameof(RB_Examination_Publish_ViewModel.ExamEndTime),nameof(RB_Examination_Publish_ViewModel.ExamStatus));
builder.AppendFormat(" AND a.{0} < '{1}' and c.{2} NOT IN(3,5) ",nameof(RB_Examination_Publish_ViewModel.ExamEndTime),DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"),nameof(RB_Examination_Publish_ViewModel.ExamStatus));