我的数据库是在mysql中
我想要实现一些事情。我有两个时间序列数据。一个记录间隔15分钟,另一个记录值发生变化时记录。我想加入这两张桌子
所需的表格为3列,{time_stamp,table1.value,table2.value}和与table1相同的行数
1)table1.value只保留它的价值
2)table2.value列在表1的time_stamp之前的15分钟内具有表2中的最后一个值
3)如果table2.value为null,则保留最后的已知值
我试图离开加入这两张桌子并尝试做" group by" time_stamp并尝试从" group by"获取最新条目。没有成功。 我还试图在结果列中替换空值 "使用@n:= COALESCE(table2.value,@ n)"。 我认为它没有用,因为加入的结果不合适。我试图在查询结束时添加订单也没有成功..
这可以在一个查询中实现吗?感谢任何帮助!
表1
+---------------------------------------+
|time | value |
+---------------------------+-----------+
|'2014-09-15 06:15:02.1500' | 71 |
|'2014-09-15 06:30:02.1500' | 72 |
|'2014-09-15 06:45:02.1500' | 73 |
|'2014-09-15 07:00:02.1500' | 74 |
|'2014-09-15 07:15:02.1500' | 75 |
|'2014-09-15 07:30:02.1500' | 76 |
|'2014-09-15 07:45:02.1500' | 77 |
+---------------------------+-----------+
表2
+---------------------------------------+
|time | value |
+---------------------------+-----------+
|'2014-09-15 06:14:02.1500' | 30 |
|'2014-09-15 06:15:02.1500' | 55 |
|'2014-09-15 06:18:02.1500' | 60 |
|'2014-09-15 06:20:02.1500' | 62 |
|'2014-09-15 06:23:02.1500' | 35 |
|'2014-09-15 07:36:02.1500' | 45 |
|'2014-09-15 07:38:02.1500' | 36 |
|'2014-09-15 07:40:02.1500' | 87 |
+---------------------------+-----------+
result_table
+---------------------------------------+----------+
|time |table1.val |table2.val|
+---------------------------+-----------+----------+
|'2014-09-15 06:15:02.1500' | 71 |30 |
|'2014-09-15 06:30:02.1500' | 72 |35 |
|'2014-09-15 06:45:02.1500' | 73 |35 |
|'2014-09-15 07:00:02.1500' | 74 |35 |
|'2014-09-15 07:15:02.1500' | 75 |35 |
|'2014-09-15 07:30:02.1500' | 76 |35 |
|'2014-09-15 07:45:02.1500' | 77 |87 |
+---------------------------+-----------+----------+
答案 0 :(得分:1)
您可以在值列表中使用subselect:
select time, value as t1value,
coalesce(@val := (
select value from table2
where time < table1.time
AND time >= table1.time - INTERVAL 15 MINUTE
order by time desc limit 1
), @old) as t2value, @old := @val from table1;