【发布时间】:2022-01-20 09:47:20
【问题描述】:
我有一个系统,仅在数据更改时才存储数据。因此,数据集如下所示。
| data_type_id | data_value | inserted_at |
|---|---|---|
| 2 | 240 | 2022-01-19 17:20:52 |
| 1 | 30 | 2022-01-19 17:20:47 |
| 2 | 239 | 2022-01-19 17:20:42 |
| 1 | 29 | 2022-01-19 17:20:42 |
我的数据频率是每 5 秒一次。所以,不管有没有timestamp,我都需要通过假设这个第5秒的数据值与之前的值相同来得到结果。
由于我正在存储仅更改的数据,因此数据集确实应该如下所示。
| data_type_id | data_value | inserted_at |
|---|---|---|
| 2 | 240 | 2022-01-19 17:20:52 |
| 1 | 30 | 2022-01-19 17:20:52 |
| 2 | 239 | 2022-01-19 17:20:47 |
| 1 | 30 | 2022-01-19 17:20:47 |
| 2 | 239 | 2022-01-19 17:20:42 |
| 1 | 29 | 2022-01-19 17:20:42 |
我不想insert into我的表,我只想在SELECT语句中检索这样的数据。
有什么方法可以创建这个查询吗?
PS。我有很多data_types,因此当 OP 进行查询时,它通常会获得大约一百万行。
编辑:
服务器信息Server version: 10.3.27-MariaDB-0+deb10u1 Debian 10
用户将确定SELECT日期时间。所以,没有确定的between 时间。
正如@Akina 提到的,有时inserted_at 之间存在一些差距。差异可能是 ~4 秒或 ~6 秒,而不是特定的 5 秒。由于不会如此频繁地发生,因此可以忽略这一事实来生成。
【问题讨论】:
-
有什么方法可以创建这个查询吗? 当然可以。提供准确的 MySQL 版本信息。
-
如何确定所需的日期时间范围?必须从什么日期时间值到什么日期时间值生成表?如果某个间隙不是 N*5 秒(例如由于时间检测精度)怎么办?
-
@Akina 我根据你的问题编辑了问题。
-
您的版本没有回答“如何确定所需的日期时间范围?”的问题。您告诉“用户将确定 SELECT DateTime”。 - 这是否意味着用户有一个确定的日期时间值并且需要确定此时的值?
-
@Akina 感谢您的回答。用户绘制响应此查询的图表。因此,用户可以绘制3天或1周或2小时或3个月等的图表。他们可以根据自己的喜好确定
date_time。因此,您可以考虑在 存储过程 中解决问题,该存储过程以data_type_ids、start_datetime和end_datetime作为 IN 参数。
标签: mysql sql interpolation missing-data