有一个数据库表 有 姓名、开始时间、所属组织 等字段,表示一个人从什么时间开始属于哪个组织。 比如有三条数据:1. 张三 2022-01-01 A。2.张三 2022-01-05 B。3.张三 2022-02-08 A。 现在我想得到一段时间内属于某个组织的人在这个组织的时间段信息。最后得到的表应该为 姓名、开始时间、结束时间。 以上面三条数据为例,求2021-01-01 至 2022-03-08 时间段内A组织的张三属于组织的时间段数据是: 1.张三 2022-01-01 2022-01-05 2.张三 2022-02-08 2022-03-08 。 请问这个sql语句以mysql5.7版本之前的语法应该怎么写
时间: 2024-01-09 18:06:00 浏览: 133
在 MySQL 5.7 版本之前,可以使用子查询和 JOIN 操作来实现这个问题。
首先,使用子查询获取在指定时间段内属于某个组织的人名和他们在该组织的开始时间:
```
SELECT DISTINCT name, start_time
FROM your_table
WHERE start_time <= '2022-03-08' AND organization = 'A'
```
然后,将该子查询作为一个表,与原始表进行 JOIN 操作,计算每个人在该组织的时间段:
```
SELECT t1.name, t1.start_time, MIN(t2.start_time) AS end_time
FROM (
SELECT DISTINCT name, start_time
FROM your_table
WHERE start_time <= '2022-03-08' AND organization = 'A'
) t1
LEFT JOIN your_table t2
ON t1.name = t2.name AND t2.start_time > t1.start_time
AND t2.organization != 'A'
GROUP BY t1.name, t1.start_time
```
这样就可以得到姓名、开始时间、结束时间的表格数据,其中结束时间为该人在该组织下的下一个开始时间,或者是指定时间段结束时间(即 2022-03-08)中的较小值。
阅读全文