【问题标题】:Last entry from group by in select, replace null with last known value选择中的最后一个条目,将null替换为最后一个已知值
【发布时间】:2014-09-17 20:43:54
【问题描述】:

我的数据库在mysql中。
我正在努力实现几件事。我有两个时间序列数据。一个以 15 分钟的间隔记录,另一个在值发生变化时记录。我正在尝试加入这两个表。
所需的表将是 3 列,{time_stamp, table1.value, table2.value} 和与 table1 相同的行数
1) table1.value 只是保持它的价值。
2) table2.value 列在 table1 的 time_stamp 前 15 分钟内具有表 2 的最后一个值
3)如果table2.value为null,则保留最后一个已知值

我尝试离开加入这两个表并尝试执行“group by”time_stamp 并尝试从“group by”获取最新条目但没有成功。 我还尝试替换结果列中的空值
“使用@n := COALESCE(table2.value,@n)”。 我认为它不起作用,因为合并的结果不正确。我尝试在查询结束时添加 order by 也没有成功..

这是否可以在一个查询中实现?感谢任何帮助!

表 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        |
+---------------------------+-----------+

结果表

+---------------------------------------+----------+
|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        |
+---------------------------+-----------+----------+

【问题讨论】:

    标签: mysql join intervals


    【解决方案1】:

    您可以为此在值列表中使用子选择:

    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;
    

    【讨论】:

    • 我试过了,返回值是从查看整个 table-2 而不是一直到时间戳。
    • 时间有条件
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-09
    • 2021-12-23
    • 2021-02-19
    • 2021-09-20
    • 1970-01-01
    相关资源
    最近更新 更多