怎么循环取今天20:00到昨天20:00等于 今天日期的数据量,单天我可以取,循环取数,老出问题。

代码执行没错误,目前取值1天的数据是当天20:00之昨天20:00为1天的数据,但是取值我看了工单日期,弄趋势图日期还是把昨天20:00-23:59的数据计算到昨天的趋势图数量去了,当天的 只能取当天,不能把范围定死在当天20:00到昨天的20:00,循环取30天。

declare @index int

set @index = 0

while @index <= 30

begin


-- select * from  #tmppinfa

insert into #tmpdangyue

select  CONVERT(DATE,getdate()-@index,23)  日期,A.县区,AA.故障量

FROM  #tmpall A

LEFT JOIN 

(

select 县区,count(distinct(工单号)) as 故障量

from #tmpty

where 1=1 AND CONVERT(VARCHAR(100),完成日期,120) BETWEEN convert(varchar(20),dateadd(day,-@index-1,GETDATE()),23) + ' 20:00:00' and convert(varchar(20),GETDATE()-@index,23) + ' 20:00:00'

group by 县区

)AA

ON A.县区=AA.县区

 


set @index = @index + 1

end



用户e3520240 发布于 2020-11-23 14:24 (编辑于 2020-11-24 16:11)
1min目标场景问卷 立即参与
回答问题
悬赏:3 F币 + 添加悬赏
提示:增加悬赏、完善问题、追问等操作,可使您的问题被置顶,并向所有关注者发送通知
共2回答
最佳回答
0
格调Lv6初级互助
发布于2020-11-24 15:45(编辑于 2020-11-24 15:55)

你between 后面的 and呢

convert(varchar(100),getdate(),120)
修改后昨天20点之后:CONVERT(VARCHAR(100),GETDATE(),120) >= convert(varchar(20),dateadd(day,-1,GETDATE()),23) + ' 20:00:00'
昨天20点到今天20点:CONVERT(VARCHAR(100),GETDATE(),120) BETWEEN convert(varchar(20),dateadd(day,-1,GETDATE()),23) + ' 20:00:00' and convert(varchar(20),GETDATE(),23) + ' 20:00:00'

image.png

  • 用户e3520240 用户e3520240(提问者) 取1天可以,我想循环30天。
    2020-11-24 16:00 
  • 格调 格调 回复 用户e3520240(提问者) union all 拼接吧,不行就在存储里面写,把结果返回给你用就行了
    2020-11-24 16:05 
  • 用户e3520240 用户e3520240(提问者) CONVERT(VARCHAR(20),完成日期,120) between \'${datedelta(日期,-1)+\" 20:00:00\"}\' and \'${日期+\" 20:00:00\"}\' 一天的我这样取值了,就是循环30天的不懂,因为我循环30天,他自动是日期对日期的数据,11/23 20:00后的数据,不会自动累加到第二天11/24去,趋势图不可以还是,条件不够?
    2020-11-24 16:05 
  • 用户e3520240 用户e3520240(提问者) 有循环30天的 选取跨日的 趋势图例子么
    2020-11-24 16:11 
  • 用户e3520240 用户e3520240(提问者) 回复 格调 那是1天1天拼接么。。。。。
    2020-11-24 16:13 
最佳回答
0
用户y7163732Lv4见习互助
发布于2020-11-24 10:52

因为你convert转换用的是date类型,是没有时分秒的,要用datetime

  • 3关注人数
  • 592浏览人数
  • 最后回答于:2020-11-24 16:11
    请选择关闭问题的原因
    确定 取消
    返回顶部