2014-03-07 27 views
0

我的表是:从SQL检索最新的日期,并获得差异

QuestionMaster

 
+-----+---------------------+ 
|qId |quesDate    | 
+-----+---------------------+ 
|1 |2014-02-04 06:12:10 | 
+-----+---------------------+ 
|2 |2014-02-05 18:46:15 | 
+-----+---------------------+ 
|3 |2014-02-05 08:06:05 | 
+-----+------+--------------+ 

AnswerMaster

 
+--------+------+---------------------+ 
|answerId|quesId|answerDate   | 
+--------+------+---------------------+ 
|1  |1  |2014-02-08 11:10:05 | 
+-----------+------+------------------+ 
|2  |1  |2014-02-10 18:06:05 | 
+--------+------+---------------------+ 
|3  |1  |2014-02-07 12:07:10 | 
+--------+------+---------------------+ 
|4  |2  |2014-02-09 09:18:05 | 
+--------+------+---------------------+ 
|5  |2  |2014-03-01 08:06:05 | 
+--------+------+---------------------+ 
|6  |2  |2014-02-15 16:10:45 | 
+--------+------+---------------------+ 
|7  |2  |2014-02-12 06:35:25 | 
+--------+------+---------------------+ 
|8  |3  |2014-03-05 08:09:05 | 
+--------+------+---------------------+ 
|9  |3  |2014-02-25 15:02:19 | 
+--------+------+---------------------+ 

我想对于一个具体的问题在天最新的应答的时间差。我试过这个查询。 我不想使用子查询。

SELECT 
question.qid as questionId, 
timestampdiff(DAY,question.quesDate,answer.answerDate) AS `answerTime` 
FROM QuestionMaster question 
Left Join AnswerMaster answer on question.qid = answer.quesid 
group by question.qid ; 

预期成果是:

 
+-----+-----------------+ 
|qId |DifferenceInDays | 
+-----+-----------------+ 
|1 |6    | 
+-----+-----------------+ 
|2 |23    | 
+-----+-----------------+ 
|3 |28    | 
+-----+-----------------+ 

什么建议吗? 在此先感谢。

+0

如果我在该上下文中使用GROUP BY,我不知道该期待什么 – Strawberry

+0

“我不想使用子查询?”你是认真的吗?你选择了一种以某种方式工作的语言和技术,但你不想使用它?你有这个理由吗? –

+0

这只是我实际查询的一部分。这就是为什么可能有性能问题。 – unknown

回答

1

您需要采取MAX(answerDate),否则MySQL将使用每个组内的一些不确定记录的值。

SELECT q.qId, DATEDIFF(MAX(a.answerDate), q.quesDate) 
FROM  QuestionMaster q JOIN AnswerMaster a ON a.quesId = q.qId 
GROUP BY q.qId 

请参阅sqlfiddle