我有一个任务表,当我开始任务tStart时以及当我结束任务tEnd时我进入。我想知道在一段时间内我花了多少分钟的工作时间。那么这个查询有什么问题吗?
SELECT SUM(MINUTE(DATEDIFF(tEnd, tStart)))
FROM tasks
WHERE tStart >= '2011-04-04'
AND tEnd <= '2011-04-04'
答案 0 :(得分:7)
你的病情
WHERE tStart >= '2011-04-04' AND tEnd <= '2011-04-04'
非常确保只留下的记录是
tStart = tEnd = '2011-04-04'
毋庸置疑,DATEDIFF之间的DATEDIFF为0,总和为0.实际上,DATEDIFF 忽略时间部分,因此您需要使用TIMEDIFF + TIME_TO_SEC
SELECT SUM(TIME_TO_SEC(TIMEDIFF(tEnd, tStart))/60)
FROM tasks
WHERE tStart >= '2011-04-04' AND tEnd <= adddate('2011-04-04', interval 1 day)
注意WHERE子句的更改。如果你想说,今天任何时间开始并且今天任何时候结束,那么范围应该是(已经假设开始&lt;结束)
WHERE tStart >= '2011-04-04'
AND tEnd < adddate('2011-04-04', interval 1 day)
您可以将其硬编码到2011-04-05,但使用<
(小于)并在最后限制中添加一天就是我在这里展示的内容。