Sql 我可以只通过一个查询在不同的时间段内获取注册表吗?

Sql 我可以只通过一个查询在不同的时间段内获取注册表吗?,sql,hsqldb,Sql,Hsqldb,我在IBM ObjectServer中有一个表,用于存储来自网络设备的警报状态 此表中有两个与此问题相关的字段:LastOccurrence和Severity。名称是自我解释的 严重性从0到5不等,但我有4个值: 2:信息 3:小调 4:主修 5:关键 我必须统计不同时间段内的警报,并将其显示在表格中 下面的图片可以更好地解释我需要什么: 目前,我可以使用UNION运算符实现这一点 但是我想知道是否可以通过一个查询来实现这一点。有不同的方法来实现这一点。一种方法是按小时分组,然后使用并集选择分组

我在IBM ObjectServer中有一个表,用于存储来自网络设备的警报状态

此表中有两个与此问题相关的字段:LastOccurrence和Severity。名称是自我解释的

严重性从0到5不等,但我有4个值:

2:信息 3:小调 4:主修 5:关键 我必须统计不同时间段内的警报,并将其显示在表格中

下面的图片可以更好地解释我需要什么:

目前,我可以使用UNION运算符实现这一点


但是我想知道是否可以通过一个查询来实现这一点。

有不同的方法来实现这一点。一种方法是按小时分组,然后使用并集选择分组表的和

首先,需要将日志转换为SQL表。假设该表有两列

CREATE TABLE LOG (TS TIMESTAMP, ET VARCHAR(10))

WITH EVENTS(HOURS, INFO, MINOR, MAJOR, CRITICAL) AS (
SELECT (LOCALTIMESTAMP - TS) INTERVAL HOUR, 
   COUNT(ET) FILTER (WHERE ET = 'Info'),
   COUNT(ET) FILTER (WHERE ET = 'Minor'),
   COUNT(ET) FILTER (WHERE ET = 'Major'),
   COUNT(ET) FILTER (WHERE ET = 'Critical')
   FROM LOG GROUP BY (LOCALTIMESTAMP - TS) INTERVAL HOUR
) 

SELECT 'Last 1 hour', SUM(INFO), SUM(MINOR), SUM(MAJOR), SUM(CRITICAL) FROM EVENTS WHERE HOURS < 1 UNION 
SELECT 'Last 6 hours', SUM(INFO), SUM(MINOR), SUM(MAJOR), SUM(CRITICAL) FROM EVENTS WHERE HOURS < 6 UNION
SELECT 'Last 12 hours', SUM(INFO), SUM(MINOR), SUM(MAJOR), SUM(CRITICAL) FROM EVENTS WHERE HOURS < 12

然后,您可以选择按小时计数的不同时段,并使用SUM计算总数。

事实上,事件并非来自日志,这最初是一个IBM ObjectServer表。我将编辑问题以了解更多细节。