【发布时间】:2016-08-21 07:01:52
【问题描述】:
我有以下数据表:
表1:
id name race_type start_time end_time
--- ---- --------- ---------- --------
111 Phelps Relay 2016-08-20 00:01:00 NULL
111 Phelps Relay NULL 2016-08-20 00:02:00
222 Phelps Relay 2016-08-20 00:03:00 NULL
222 Phelps Relay NULL 2016-08-20 00:04:00
333 Lochte Butterfly 2016-08-20 00:05:00 NULL
333 Lochte Butterfly NULL 2016-08-20 00:06:00
444 Lochte Butterfly 2016-08-20 00:07:00 NULL
444 Lochte Butterfly NULL 2016-08-20 00:08:00
表2:
name race_type current_time qualifies
---- --------- ------------ ---------
Phelps Relay 2016-08-20 00:03:30
Lochte Butterfly 2016-08-20 00:05:30
对于 Table2 中的两个事务,我需要确定这些事务的 CURRENT_TIME 是否在 Table1 记录的 START_TIME 和 END_TIME 范围内,关于每个唯一 ID 配对、名称和race_type。
我的想法是首先使用 GROUP BY 和 MIN 和 MAX 函数“合并”表 1 中的数据(id):
SELECT id,name,race_type, MIN(start_time) AS start_time, MAX(end_time) AS end_time
FROM Table1
GROUP BY id
这会给我以下结果:
+-----+--------+---------------+----------------------+---------------------+
| id | name | race_type | start_time | end_time |
+-----+--------+---------------+----------------------+---------------------|
| 111 | phelps | relay | 2016-08-20 00:01:00 | 2016-08-20 00:02:00 |
| 222 | phelps | relay | 2016-08-20 00:03:00 | 2016-08-20 00:04:00 |
| 333 | lochte | Butterfly | 2016-08-20 00:05:00 | 2016-08-20 00:06:00 |
| 444 | lochte | Butterfly | 2016-08-20 00:06:00 | 2016-08-20 00:08:00 |
+-----+--------+---------------+----------------------+---------------------+
基于这些结果,我可以更轻松地确定 phelps 或 lochte current_time 的接力或蝶泳(在表 2 中)是否在他们各自名称和 race_type 的开始或结束时间范围内。如果它确实属于这些范围之一,我会将 Table2 qualifies 参数设置为 true。
有人可以推荐一个可以完成这项任务的 MySQL 查询吗?我猜我可以使用 GROUP BY 的某种组合来首先“合并”表 1 中的 id,而不是使用 exists?
【问题讨论】:
-
为什么将
start_time和end_time存储在不同的行中?