【发布时间】:2012-05-27 22:25:32
【问题描述】:
我有一个 (MySQL) 表,其中包含两个日期/时间字段:start 和 end(每个类型均为 datetime)。我需要一个查询,它为某个用户和定义的日期提供start 的最低值和end 的最高值。我终于成功了以下查询:
SELECT job.id, job.user_id, job.start, last.end
FROM job
JOIN job AS last
ON job.user_id = last.user_id
AND DATE( job.start ) = DATE( last.start )
AND last.end = (SELECT max( last2.end)
FROM job AS last2
WHERE last2.user_id = last.user_id
AND DATE( last2.end ) = DATE( last.end ))
WHERE job.user_id = 1
AND DATE( job.start ) = '2012-05-28'
ORDER BY job.start ASC
LIMIT 0,1
即使它有效,但它并不“感觉”正确。有没有更简单的方法来做到这一点? 非常感谢任何帮助和提示。谢谢!
示例数据:
user_id start end
1 2012-05-28 07:13:00 2011-04-26 07:45:00
1 2012-05-28 08:15:00 2011-04-26 08:50:00
1 2012-05-28 05:32:00 2011-04-26 05:51:00
1 2012-05-28 08:50:00 2011-04-26 09:50:00
1 2012-05-28 15:10:00 2011-04-26 15:40:00
1 2012-05-27 16:11:00 2011-04-26 16:46:00
2 2012-05-28 09:50:00 2011-04-26 10:35:00
【问题讨论】:
-
DATE( job.start )???job.start列是什么类型的? -
一些示例数据和预期输出将大大帮助我们帮助您。
-
按 job.start 排序不返回从 start 开始的最小值。它返回给定用户的所有值从开始的最低值开始。如果给定用户有两行作业具有相同的结束日期,则它们都将被返回。
-
如果你用 LIMIT 0,1 将它限制为一个值,它会返回最小值
-
同一个user_id应该有多行?我认为这意味着为每个 user_id 显示一次最低起点和最高终点