mysql - 在 SQL 中插入多系列数据

标签 mysql sql interpolation missing-data

我有一个系统,仅在数据发生更改时才存储数据。因此,数据集如下所示。

<表类=“s-表”> <标题> data_type_id 数据值 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 秒的数据值与前一个值相同来获得结果。

由于我存储的是仅更改的数据,因此数据集确实应该如下所示。

<表类=“s-表”> <标题> data_type_id 数据值 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_type因此,当 OP 进行查询时,通常会得到大约一百万行。

编辑: 有关服务器的信息Server version: 10.3.27-MariaDB-0+deb10u1 Debian 10

用户将确定 SELECT 日期时间。所以,没有确定的between时间。

正如 @Akina 提到的,有时 inserted_at 之间存在一些间隙。 。差异可能是 ~4 秒或 ~6 秒,而不是某个 5 秒。由于它不会频繁发生,因此可以忽略这一事实来生成。

最佳答案

借助可获取 data_type_id 的所有组合和所需的 5 秒时刻的查询,您可以使用可获取最接近的 的子查询来获得所需的结果>数据值:

with recursive u as
(select '2022-01-19 17:20:42' as d
union all
select DATE_ADD(d, interval 5 second) from u
where d < '2022-01-19 17:20:52'),
v as
(select * from u cross join (select distinct data_type_id from table_name) t)
select v.data_type_id, 
(select data_value from table_name where inserted_at <= d and data_type_id = v.data_type_id
order by inserted_at desc limit 1) as data_value, 
d as inserted_at
from v

Fiddle

您可以将递归 CTE 替换为任何可以获得所需的 5 秒时刻的查询。

关于mysql - 在 SQL 中插入多系列数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70783972/

相关文章:

mysql - mysql更新查询是否会在列上重建索引并一次又一次更新相同的值?

php - 插入数据库后获取所有 url GET 值和一些随机值

mysql - 如何将 mysql 查询执行到 cf7 按钮操作中

C#/SQL 错误 : There was an error parsing the query. [ token 行号 = 1, token 行偏移量 = 26,错误中的 token = 用户 ]

angular - ngClass - vs - [attr.class] - vs - 类 |属性插值是否会被弃用以及如何实现这一性能

python - 如何格式化字符串以在 Python 中使用 mysqldb 进行查询?

mysql - MySQL 中何时使用单引号、双引号和反引号

sql - 何时选择词典 ADT

c# - Unity 中的加速

sql - 使用 SQL 插入大数据值