注册
达梦数据库对时间进行抽样查询
专栏/技术分享/ 文章详情 /

达梦数据库对时间进行抽样查询

油菜花 2024/09/27 1814 0 0
摘要

在项目应用中,存在对数据进行抽样查询的情况,特别是存储表中数据以时间作为主键。下面进行举例说明。
1、构造数据

--创建TABLE_SAMPLING表
create table SYSDBA.TABLE_SAMPLING
(
	"TS" TIMESTAMP(3) WITHOUT TIME ZONE not null ,
	"ID" INT not null ,
	primary key("TS")
);
 
--每秒存一条数据,以10小时数据量为例,循环写入
begin
 for i in 1..36000
 loop
 insert into SYSDBA.TABLE_SAMPLING values((SELECT TIMESTAMPADD(SECOND,i,'2024-09-20 16:49:34.123') as ts),i);
 end loop;
end;

2、抽样查询
方法一:使用达梦数据库自带的BIGDATEDIFF函数

select * from SYSDBA.TABLE_SAMPLING where TS>='2024-09-20 16:49:34.123' and TS<='2024-09-21 02:49:35.123' and (BIGDATEDIFF(S, '2024-09-20 16:49:34.123', TS)%5)=0;

1.png
方法二:拼写复杂SQL语句

select * from SYSDBA.TABLE_SAMPLING where TS>='2024-09-20 16:49:34.123' and TS<='2024-09-21 02:49:35.123' and 
(((extract(HOUR FROM (TS-to_timestamp('2024-09-20 16:49:34.123', 'YYYY-MM-DD HH24:MI:SS')) DAY TO SECOND)*3600 + 
extract(MINUTE FROM (TS-to_timestamp('2024-09-20 16:49:34.123', 'YYYY-MM-DD HH24:MI:SS.ff')) DAY TO SECOND)*60 + 
cast(extract(SECOND FROM (TS-to_timestamp('2024-09-20 16:49:34.123', 'YYYY-MM-DD HH24:MI:SS.ff')) DAY TO SECOND) as int))%5)=0);

2.png

评论
后发表回复

作者

文章

阅读量

获赞

扫一扫
联系客服