我有一个系统,仅在数据发生更改时才存储数据。因此,数据集如下所示。
我的数据频率是每 5 秒一次。那么,是否有timestamp
或者不需要,我需要通过假设第 5 秒的数据值与前一个值相同来获得结果。
由于我存储的是仅更改的数据,因此数据集确实应该如下所示。
我不想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
您可以将递归 CTE 替换为任何可以获得所需的 5 秒时刻的查询。
关于mysql - 在 SQL 中插入多系列数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70783972/