我正在尝试计算用户回答Q& A网站上的问题所需的平均时间,例如SO。我正在使用Symfony和Doctrine。以下代码给出了结果,但它不是我要找的结果。它给出了所有答案的平均值,我希望它只给出第一个答案的平均值。
$qb = $this->getEntityManager()->createQueryBuilder();
$qb
->select('SUM(UNIX_TIMESTAMP(a.date) - UNIX_TIMESTAMP(q.date)) / COUNT(DISTINCT q.id)')
->from(Question::class, 'q')
->join('q.answer', 'a')
;
return $qb->getQuery()->getSingleScalarResult();
我尝试在MIN()
周围投掷a.date
,但是它给出了一个groupby错误。
我该如何做到这一点?
答案 0 :(得分:0)
您需要的是加入每个问题最旧的答案。您可以使用ON子句中的子查询
来实现这一点SELECT AVG(UNIX_TIMESTAMP(answer.date) - UNIX_TIMESTAMP(question.date)) as avgFirstResponseTime
FROM question
INNER JOIN answer ON answer.id = (
SELECT id
FROM answer
WHERE question_id = question.id
ORDER BY date ASC
LIMIT 1
)
我注意到这种子查询是否适用于doctrines querybuilder或DQL。但是如果DQL不支持它,你可以使用$entityManager->createNativeQuery
。