SQLserver每10分钟存一次数,怎样在一个表中既能查询整点值又计算出对应的每小时的数据之和

SQL server 每10分钟存一次数,怎样在一个表中既能查询整点值又计算出对应的每小时的数据之和,

FineReport LBJ23 发布于 2023-8-30 09:21
1min目标场景问卷 立即参与
回答问题
悬赏:3 F币 + 添加悬赏
提示:增加悬赏、完善问题、追问等操作,可使您的问题被置顶,并向所有关注者发送通知
共4回答
最佳回答
0
Z4u3z1Lv6专家互助
发布于2023-8-30 09:28

递归?

 参考下面的修改   

with area(id,"name",f_id,leve) as (

  select  1,'中国',0,1 union all

  select  2,'湖北',1,2 union all

  select  3,'武汉',2,3 union all

  select  4,'云贵',1,2 union all

  select  5,'云南',4,3 union all

  select  6,'贵阳',4,3 union all

  select  7,'云南子区',5,4 union all

  select  8,'贵阳子区',6,4 union all

  select  9,'蔡甸',2,3

), "table"(id,area_id,"money") as (

  select  1,3,10 union all

  select  2,9,5 union all

  select  3,7,20 union all

  select  4,8,30

)

--使用cte递归求出每个节点的路径

,t(id,f_id,"name","level",fullpath) as (

  select a.id,a.f_id,a."name",a.leve,cast(a.id as varchar(max))

  from area a

  where a.leve=1

  union all

  select b.id,b.f_id,b."name",b.leve,t.fullpath+'->'+cast(b.id as varchar(max))

  from area b

  inner join t on t.id=b.f_id

)

--汇总统计每个节点的金额

select t.id,t."name",t."level",sum(c."money") as "money"

from t

inner join t t1 on charindex(t.fullpath,t1.fullpath)=1

inner join "table" c on c.area_id=t1.id

group by t.id,t."name",t."level"

--having t."level"=2 --筛选出第二层级

order by t.id

  • LBJ23 LBJ23(提问者) 不是,而是比如1个小时不是存了6个数据吗,要查询1点的实时数据和这6个数据的和,即表格左边显示1点当前发生的数据,右边显示这1小时的6个数据的和
    2023-08-30 09:40 
  • Z4u3z1 Z4u3z1 回复 LBJ23(提问者) 用excel示例一下原始数据 以及你需要的结果呢
    2023-08-30 09:45 
  • LBJ23 LBJ23(提问者) 回复 Z4u3z1 时间 当前水量 每小时用水量 1:00 234 22 2:00 244 10 3:00 254 10 4:00 264 10 5:00 274 10 6:00 284 10 7:00 294 10 8:00 304 10 9:00 314 10 10:00 324 10 11:00 334 10 12:00 344 10
    2023-08-30 09:51 
最佳回答
0
用户bBKn44909079Lv3见习互助
发布于2023-8-30 09:45

表里面有数据存入时间吗,根据这个时间判断

最佳回答
0
LazySheepLv7高级互助
发布于2024-5-9 09:41(编辑于 2024-5-9 14:29)
WITH HourlySums AS (       SELECT            DATEPART(HOUR, TimestampColumn) AS HourOfDay,           SUM(ValueColumn) AS SumValue       FROM            YourTable       GROUP BY            DATEPART(HOUR, TimestampColumn)   ),   OnTheHour AS (       SELECT            TimestampColumn,           ValueColumn       FROM            YourTable       WHERE            DATEPART(MINUTE, TimestampColumn) = 0   )      SELECT        h.HourOfDay,       o.TimestampColumn AS OnTheHourTimestamp,       o.ValueColumn AS OnTheHourValue,       h.SumValue   FROM        HourlySums h   LEFT JOIN        OnTheHour o ON h.HourOfDay = DATEPART(HOUR, o.TimestampColumn)   ORDER BY        h.HourOfDay;

最佳回答
0
cstnLv2见习互助
发布于2024-5-9 10:35(编辑于 2024-5-9 10:36)
SELECT DATEPART(hour, {时间列}), 用水量, 0 as 小时用水量 FROM {你的表} WHERE DATEPART(minute, {时间列}) = 0 AND DATEPART(second, {时间列}) = 0 union all SELECT DATEPART(hour, {时间列}), 0 as 用水量, sum(用水量) as 小时用水量 FROM {你的表} group by DATEPART(hour, {时间列})

  • 4关注人数
  • 265浏览人数
  • 最后回答于:2024-5-9 14:29
    请选择关闭问题的原因
    确定 取消
    返回顶部