Mysql 如何从行到列显示日期序列
具有主字段idPeriod和几百条记录的表周期。 表date_类带有idPeriod和dateClass 还有要显示的名称。每个名字都有相同的句号和5个日期 每个周期有5个日期Mysql 如何从行到列显示日期序列,mysql,rows,Mysql,Rows,具有主字段idPeriod和几百条记录的表周期。 表date_类带有idPeriod和dateClass 还有要显示的名称。每个名字都有相同的句号和5个日期 每个周期有5个日期 +-----------+------------+ | idPeriode | dateClass | +-----------+------------+ | 302367 | 2020-02-18 | | 302367 | 2020-02-25 | | 302367 | 2020-03-03 |
+-----------+------------+
| idPeriode | dateClass |
+-----------+------------+
| 302367 | 2020-02-18 |
| 302367 | 2020-02-25 |
| 302367 | 2020-03-03 |
| 302367 | 2020-03-10 |
| 302367 | 2020-03-17 |
+-----------+------------+
我想展示:
+----------+---------------------+------------+------------+------------+------------+
| Name | Period | Date1 | Date2 | Date3 | Date4 | Date5 |
+----------+---------------------+------------+------------+------------+------------+
| Bousquet | 302367 | 2020-02-18 | 2020-02-25 | 2020-03-03 | 2020-03-10 | 2020-03-17 |
| Grignon | 302367 | 2020-02-18 | 2020-02-25 | 2020-03-03 | 2020-03-10 | 2020-03-17 |
| Rajotte | 302367 | 2020-02-18 | 2020-02-25 | 2020-03-03 | 2020-03-10 | 2020-03-17 |
| Vandal | 302367 | 2020-02-18 | 2020-02-25 | 2020-03-03 | 2020-03-10 | 2020-03-17 |
| Tessier | 302367 | 2020-02-18 | 2020-02-25 | 2020-03-03 | 2020-03-10 | 2020-03-17 |
| Beauvais | 302367 | 2020-02-18 | 2020-02-25 | 2020-03-03 | 2020-03-10 | 2020-03-17 |
+----------+--------+------------+------------+------------+------------+------------+
有点不清楚为什么要这样做,但通过在查询中实现一些函数是可以实现的。有关示例,请参阅以下查询:
SELECT NAME, idperiode,
SUBSTRING_INDEX(dateclass,',',1) AS date_1,
SUBSTRING_INDEX(SUBSTRING_INDEX(dateclass,',',2),',',-1) AS date_2,
SUBSTRING_INDEX(SUBSTRING_INDEX(dateclass,',',3),',',-1) AS date_3,
SUBSTRING_INDEX(SUBSTRING_INDEX(dateclass,',',4),',',-1) AS date_4,
SUBSTRING_INDEX(dateclass,',',-1) AS date_5
FROM
(SELECT NAME,
idperiode,
GROUP_CONCAT(dateclass ORDER BY dateclass) AS dateclass
FROM mytable
GROUP BY NAME, idperiode) A;
第一部分是一个子查询,使用GROUP\u CONCAT
组合所有日期(假设所有日期仅在一个表中)。然后使用SUBSTRING\u INDEX
分隔分组日期
如果有两个没有关系的表,那么您可以在表上使用
交叉联接
。我还对子查询进行了轻微修改,而外部查询的功能仍然相同。始终以1周为间隔?idPeriodd不能是主键,因为它不是唯一的。哪个MySQL版本?为什么要为一堆名称重新创建同一行?这可以在应用程序中完成。这组名字来自哪里?它们是否等同于每个idPeriode?是什么将名称字段绑定到idPeriode或dateClass字段中?1)大多数时间间隔为1周;但是偶尔会有一节课被推迟,并且会在序列的末尾添加一个日期(额外的一周)-更改的一周的日期将不再出现-它将保持52)在第二个表中(date_类)。关键是idPeriod+DateClass谢谢-这很有趣-我需要调整它,但这是一个非常好的开始。