Sql 将同一小时内的列相加,如果该小时没有记录,则将值存储为0
假设我有一个包含以下记录的表:Sql 将同一小时内的列相加,如果该小时没有记录,则将值存储为0,sql,Sql,假设我有一个包含以下记录的表: Date |Instances 2015-10-12 06:15:00.000 |2 2015-10-12 06:45:00.000 |5 2015-10-12 04:15:00.000 |2 2015-10-12 04:25:00.000 |3 2015-10-12 03:15:00.000 |5 2015-10-12 02:15:00.000 |6 2015-10-12 01:15:00.000 |6 我通过以下查
Date |Instances
2015-10-12 06:15:00.000 |2
2015-10-12 06:45:00.000 |5
2015-10-12 04:15:00.000 |2
2015-10-12 04:25:00.000 |3
2015-10-12 03:15:00.000 |5
2015-10-12 02:15:00.000 |6
2015-10-12 01:15:00.000 |6
我通过以下查询在同一小时内对所有实例求和:
SELECT DATEPART(HOUR,DATE) as TIMEHOUR,
SUM([INSTANCES]) as INSTANCESUM
FROM TABLE (NOLOCK)
where DATE BETWEEN DATEADD(HOUR, -5, GETUTCDATE()) AND GETUTCDATE()
group by DATEPART(HOUR, DATE)
order by DATEPART(HOUR, DATE) DESC
结果是这样的:
TIMEHOUR | INSTANCESUM
6 | 7
4 | 5
3 | 5
2 | 6
1 | 6
TIMEHOUR | INSTANCESUM
6 | 7
---> 5 | 0 <---
4 | 5
3 | 5
2 | 6
1 | 6
但是如果没有,我需要一个小时来记录instancesum为0。假设UTC时间为06:00,表将返回如下内容:
TIMEHOUR | INSTANCESUM
6 | 7
4 | 5
3 | 5
2 | 6
1 | 6
TIMEHOUR | INSTANCESUM
6 | 7
---> 5 | 0 <---
4 | 5
3 | 5
2 | 6
1 | 6
请参阅下面的代码:
declare @temp table (timehour int, instancesum int)
insert into @temp values (6,7), (4,5), (3,5), (2,6), (1,6) -- Replace values with your original query.
select timehour, instancesum from @temp
union
select l.timehour + 1 as timehour, 0
from
@temp as l
left join @temp as r on l.timehour + 1 = r.timehour
where
l.timehour < (select max(timehour) from @temp) and
r.timehour is null
我在MS-SQL中尝试了这一点,因为我没有使用过MySQL。然而,大多数逻辑将保持不变。我唯一不确定的部分是在MySQL中创建@temp临时表。如果您可以更改该部分(如果需要),您就可以了。要回答原始问题,您可以在同一小时内将表左键联接到自身,并且在左键联接中一小时内未出现的实例应将其总和报告为null,然后您可以对输出0应用nvl处理作为其总和。大概是这样的:
TIMEHOUR | INSTANCESUM
6 | 7
4 | 5
3 | 5
2 | 6
1 | 6
TIMEHOUR | INSTANCESUM
6 | 7
---> 5 | 0 <---
4 | 5
3 | 5
2 | 6
1 | 6
回答评论中的第二个问题:
您应该能够以您想要使用的任何格式输出日期时间
To_char(date, 'yyyymmdd hh:mm:ss')
至少这在Oracle中是可行的,MySQL语法可能略有不同。接下来的问题是:有没有办法将TIMEHOUR显示为日期时间格式yyyy mm dd hh?在group by和order by中,它不应该是DATE而不是TIMEOURE?看起来像是个打字错误。@vnikhil是的,那是个打字错误。感谢您指出,您需要一个统计表,提供所有需要的值(1到24?)。然后你可以在FROM和LEFT中使用它来连接你的数据。你知道这个的mssql版本吗?无法让它工作你的错误是什么?这是所有感兴趣的air代码,所以它可能有语法问题,但在概念上它应该可以工作。