如何按日期分组查询time_start最小值与time_end最大值?
解决按日期分组取最早开始时间和最晚结束时间的SQL问题
嘿,你其实不需要用复杂的子查询来实现这个需求,直接用GROUP BY配合基础聚合函数就能轻松搞定!
正确的SQL查询语句
SELECT date_start AS DATE, MIN(time_start) AS MIN, MAX(time_end) AS MAX FROM your_table_name -- 记得替换成你的实际表名 GROUP BY date_start ORDER BY date_start;
代码逻辑解释
GROUP BY date_start:按照date_start字段对数据分组,把同一天的所有记录归为一组MIN(time_start):计算每组(每一天)里最早的开始时间MAX(time_end):计算每组(每一天)里最晚的结束时间ORDER BY date_start:可选步骤,用来让结果按日期顺序排列,和你预期的输出格式完全匹配
执行后的预期结果
运行这条SQL后,会得到和你想要完全一致的输出:
| DATE | MIN | MAX |
|---|---|---|
| 2020-06-01 | 08:36 | 20:00 |
| 2020-06-02 | 09:36 | 19:44 |
| 2020-06-03 | 12:36 | 23:04 |
关于你之前子查询失败的小提示
可能你之前的子查询逻辑绕了弯路,其实没必要嵌套查询来获取极值——聚合函数本身就支持在分组后直接计算每组的最值,这是最直接高效的实现方式哦。
内容的提问来源于stack exchange,提问作者lionegr
相关产品推荐
相关产品推荐

