diff --git a/repository/result/result.go b/repository/result/result.go index 84a41f3..291430f 100644 --- a/repository/result/result.go +++ b/repository/result/result.go @@ -117,12 +117,19 @@ func (r *ResultRepository) UpdateAnswersStatus(ctx context.Context, accountID st func (r *ResultRepository) GetQuizResultsCSV(ctx context.Context, quizID uint64, reqExport GetQuizResDeps) ([]model.Answer, error) { var results []model.Answer - mainQuery := `SELECT DISTINCT ON (a.question_id, a.session, a.created_at, a.result) - a.id, a.content, a.question_id, a.quiz_id, a.fingerprint, a.session, a.result, a.created_at, a.new, a.deleted,a.version - FROM - answer a - WHERE - a.quiz_id = $1 AND a.deleted = FALSE` + mainQuery := `WITH ordered_content AS ( + SELECT a.id, a.question_id, a.quiz_id, a.fingerprint, a.session, a.result, a.created_at, a.new, a.deleted,a.version, + COALESCE(NULLIF(a.content, ''),MAX(NULLIF(a.content, '')) OVER ( + PARTITION BY a.session, a.question_id ORDER BY a.created_at ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW)) AS last_not_empty + FROM answer a + WHERE a.quiz_id = $1 AND a.deleted = FALSE +) +SELECT DISTINCT ON (a.question_id, a.session) + a.id, COALESCE(a.last_not_empty,''), a.question_id, a.quiz_id, a.fingerprint, + a.session, a.result, a.created_at, a.new, a.deleted, a.version +FROM ordered_content a WHERE EXISTS ( + SELECT 1 FROM answer as a2 + WHERE a2.session = a.session AND a2.result = TRUE AND a2.quiz_id = a.quiz_id)` queryParams := []interface{}{quizID} @@ -136,11 +143,6 @@ func (r *ResultRepository) GetQuizResultsCSV(ctx context.Context, quizID uint64, queryParams = append(queryParams, reqExport.New) } - mainQuery += ` AND EXISTS ( - SELECT 1 FROM answer as a2 - WHERE a2.session = a.session AND a2.result = TRUE AND a2.quiz_id = a.quiz_id - )` - mainQuery += ` ORDER BY a.session, a.question_id ASC, a.created_at DESC, a.result DESC` rows, err := r.pool.QueryContext(ctx, mainQuery, queryParams...)