在项目应用中,存在对数据进行抽样查询的情况,特别是存储表中数据以时间作为主键。下面进行举例说明。
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;
方法二:拼写复杂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);
文章
阅读量
获赞