所以我必须使用一个以时间为列的数据库(特定日期每 10 分钟有一个列),这里的 id
不是主键,尽管它是唯一的(和主键)在另一个表中。行等于一天。
因此,我希望每个时间段的值与它的日期时间连续。
这可能吗? 我可以编写一个小程序,用我需要的内容重新创建一个表,但我希望尽可能减少重复数据。
我有什么:
+---+----------+-----+-----+-----+-----+
|ID | DATE |00h00|00h10|00h20|00h30|
+---+----------+-----+-----+-----+-----+
|1 |2016-09-28|80 |79 |75 |73 |
+---+----------+-----+-----+-----+-----+
|1 |2016-09-27|82 |80 |76 |74 |
+---+----------+-----+-----+-----+-----+
我想要的:
+---+----------------+-----+
|ID | DATE |VALUE|
+---+----------------+-----+
|1 |2016-09-28 00h00|80 |
|1 |2016-09-28 00h10|79 |
|1 |2016-09-28 00h20|75 |
|1 |2016-09-28 00h30|73 |
+---+----------------+-----+
|1 |2016-09-28 00h00|82 |
|1 |2016-09-28 00h10|80 |
|1 |2016-09-28 00h20|76 |
|1 |2016-09-28 00h30|74 |
+---+----------------+-----+
最佳答案
最简单的方法是使用union all
:
select id, date_add(date, interval 0 minute) as date, `00h00` as value from t union all
select id, date_add(date, interval 10 minute) as date, `00h10` as value from t union all
. . .
如果你有一个数字表,你也可以这样做:
select t.id, date_add(date, interval (n.n - 1) * 10 minute) as date,
(case when n = 1 then `00h00`
when n = 2 then `00h10`
. . .
end) as value
from t join
numbers n
on n.n < 24 * 6;
如果不以某种方式列出所有列,我认为在 MySQL 中没有任何方法可以做到这一点。您可以使用其他查询或电子表格来生成 SQL。
关于mysql - 列作为与另一列连接的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39747309/