首页 > 电脑 > sqlserver查询前七天的数据,没有记录的补充数据

sqlserver查询前七天的数据,没有记录的补充数据

电脑 2023-05-18

sqlserver 中,如何查询把缺少数据自动填补出来,下图中缺少2013-05-27 19:00:00.000 130.4560000000

  1. 问题分析:您要的结果是要每一小时一条记录,补充添写中间间隔一小时以上的记录。并且不另增加记录:

  2. 问题解决:找到每一条记录时间加1小时在表中不存在的记录,然后加一小时填入表中,不包括最后(最大的)的时间。

3.语句实现(两种方案):

以下语句可以在每一个缺少的数据后加入一小时后填入,但间隔更大(超过2小时后就不行了):

insert into tablename

select fieldtime=dateadd(hh,1,fieldtime),fieldnum from tablename a

where not exists(select 1 from tablename b where dateadd(hh,1,a.fieldtime)=b.fieldtime)

and a.fieldtime!=(select max(fieldtime) from tablename)--去掉最后的时间

以下方案可以完成补充间隔数小时的记录:将该语句循环执行,直到没有记录更改。

insert into tablename

select fieldtime=dateadd(hh,1,fieldtime),fieldnum from tablename a

where not exists(select 1 from tablename b where dateadd(hh,1,a.fieldtime)=b.fieldtime)

and a.fieldtime!=(select max(fieldtime) from tablename)--去掉最后的时间

while @@rowcount>0

select fieldtime=dateadd(hh,1,fieldtime),fieldnum from tablename a where not exists(select 1 from tablename b where dateadd(hh,1,a.fieldtime)=b.fieldtime) and a.fieldtime!=(select max(fieldtime) from tablename)

sql查询没有数据的时候怎么用0填充

这样:

SELECT

a.dt AS '时间',

ISNULL(b.yield, '0') AS '数据'

FROM

(

SELECT

dateadd(d, number, '2018-11-01') dt

FROM

master..spt_values

WHERE

type = 'p'

AND dateadd(d, number, '2018-11-01') <= '2018-11-30'

) a

LEFT JOIN CE_BD_E_ELECTRIC_WORKSHIFT_T b ON a.dt = b.opdate

扩展资料:

注意事项

COALESCE是一个函数, (expression_1, expression_2, …,expression_n)依次参考各参数表达式,遇到非null值即停止并返回该值。如果所有的表达式都是空值,最终将返回一个空值。使用COALESCE在于大部分包含空值的表达式最终将返回空值。

场景一:你想要获取最大值,然后+1返回(即返回的值已经默认为空了),程序接收了本来不该为空的值去运算,就会出错。

SELECT MAX(my_money)+1 FROM tb_test;

改进方法:使用 coalesce函数 COALESCE(值1, 值2,......, 值n) ,只要遇到非null值就返回。

这样子就可以设置一个值,让你第一个不成功后,返回指定的值,如下面,返回的是1.

SELECT COALESCE(MAX(my_money)+1, 1) FROM tb_test;

SQL统计问题,怎么样实现按天查询出没有的记录条数。高手回答一下。

sqlserver写法

其他数据库的话,语法得改,字段类型不一致的话也得改

创建表

createtabletest
(姓名varchar(10),
时间varchar(10))
insertintotestvalues('张三','2014-1-2')
insertintotestvalues('张三','2014-1-6')
insertintotestvalues('李四','2014-1-2')

执行

selects1.*
from
(selectt2.姓名,t1.rq
from
(selectconvert(varchar(10),rq,120)rq
from
(selectcast('2014-1-2'asdatetime)+numberrqfrommaster..spt_valueswheretype='p')t
wheret.rqbetween'2014-1-2'and'2014-1-6')t1,
(selectdistinct姓名fromtest)t2)s1
wherenotexists(select1fromtests2wheres1.姓名=s2.姓名ands1.rq=convert(varchar(10),cast(s2.时间asdatetime),120))

结果

----------------------补充---------------

你下次能不能直接追问,这样补充都看不到的,幸亏我又看了一眼

selects1.*
from
(selectt2.姓名,t1.rq
from
(selectconvert(varchar(10),rq,120)rq
from
(selectcast('2014-1-2'asdatetime)+numberrqfrommaster..spt_valueswheretype='p')t
wheret.rqbetween'2014-1-2'and'2014-1-6')t1,
(select姓名from人员表)t2)s1
wherenotexists(select1fromtests2wheres1.姓名=s2.姓名ands1.rq=convert(varchar(10),cast(s2.时间asdatetime),120))
orderbys1.姓名,s1.rq

我新建了一个人员表,里边就一列,叫“姓名”

sql 语言 显示所有 5天之前的数据

SQL,即结构化查询语言,是现在主流的数据库如SQLServer的,甲骨文,DB2,MySQL和其他主流的查询语言,SQL是一组对这些数据库查询最小,查询语言为每个数据库都有自己的不同之处。如表10前检查的数据,甲骨文选择排名前10位的表,和MySQL用select * from表限制0,10。

sqlserver 查询出前十条,发布时间前十天内的记录

sqlserver 查询出前十条,发布时间前三十天内的记录select top 10 * from PPst_News where datediff (day,AddTime,dateadd(day,-3,convert(varchar(20),getdate(),120)))<10要想查询今天起前三十天内发布的记录,可用以上方法写查询。

标签:数据库 信息技术 MySQL sqlserver 数据

大明白知识网 Copyright © 2020-2022 www.wangpan131.com. Some Rights Reserved. 京ICP备11019930号-18