Oracle中对数据分组统计
一、实现效果1.1、原表内容1.2、实现效果①实现对报警信息(TYPENAME)内容分组,且对设备编号、报警信息、开始时间排序效果。②实现对报警信息(TYPENAME)内容分组统计,且计算开始时间(CreationTimeStart)、结束时间(CreationTime)差值(对差值保留2位小数)效果。③实现对报警信息(TYPENAME)内容分组统计,且获取最小开始时间(CreationTimeS
一、实现效果
1.1、原表内容
1.2、实现效果
①实现对报警信息(TYPENAME)内容分组,且对设备编号、报警信息、开始时间排序效果。
②实现对报警信息(TYPENAME)内容分组统计,且计算开始时间(CreationTimeStart)、结束时间(CreationTime)差值(对差值保留2位小数)效果。
③实现对报警信息(TYPENAME)内容分组统计,且获取最小开始时间(CreationTimeStart)、最大结束时间(CreationTime)差值(对差值保留2位小数)效果。
二、实现原理
2.1、实现思路
①使用【Group by】对需要分组的字段分组;
②使用【Count】统计个数,【Sum】求和,【min、max】求最小最大;
③使用【Order by】对需要排序的字段排序;
④基础的sql语句
//分组的基础SQL执行语句
SELECT '字段1','字段2','字段3' FROM '表名称' GROUP BY '需分组的字段1','需分组的字段2','需分组的字段3' HAVING '需要判断的字段条件' ORDER BY '需排序的字段' ASC
2.2、实现效果的SQL语句
①实现对报警信息(TYPENAME)内容分组,且对设备编号、报警信息、开始时间排序SQL.
SELECT
DeviceNumber,
DeviceName,
DeviceType,
TypeName,
DeviceValue,
CreationTimeStart,
CreationTime
FROM
DEVICEALARM
WHERE
DeviceNumber IN ( 'C1_02_01' )
AND TYPENAME LIKE '%1管%'
AND CreationTimeStart BETWEEN TO_DATE( '2021-09-28 08:00:00', 'yyyy-MM-dd hh24:mi:ss' )
AND TO_DATE( '2021-09-28 19:59:59', 'yyyy-MM-dd hh24:mi:ss' )
GROUP BY
DeviceNumber,
DeviceName,
DeviceType,
TypeName,
DeviceValue,
CreationTimeStart,
CreationTime
ORDER BY
DeviceNumber ASC,
TYPENAME ASC,
CreationTimeStart DESC
②实现对报警信息(TYPENAME)内容分组统计,且计算开始时间(CreationTimeStart)、结束时间(CreationTime)差值(对差值保留2位小数)效果。
SELECT
DeviceNumber,
DeviceName,
DeviceType,
TypeName,
COUNT( TypeName ) AlarmNumber,
TO_CHAR( SUM( AffectMinutes ), 'FM9990.00' ) AffectMinutes1
FROM
(
SELECT
*
FROM
(
SELECT
DeviceNumber,
DeviceName,
DeviceType,
TypeName,
CreationTimeStart,
CreationTime,
TO_CHAR( ( ( DA.CreationTime - DA.CreationTimeStart ) * 24 * 60 ), 'FM9990.00' ) AffectMinutes
FROM
DEVICEALARM DA
)
WHERE
DeviceNumber IN ( 'C1_02_01' )
AND TYPENAME LIKE '%1管%'
AND CreationTimeStart BETWEEN TO_DATE( '2021-09-28 08:00:00', 'yyyy-MM-dd hh24:mi:ss' )
AND TO_DATE( '2021-09-28 19:59:59', 'yyyy-MM-dd hh24:mi:ss' )
)
GROUP BY
DeviceNumber,
DeviceName,
DeviceType,
TypeName
ORDER BY
TypeName ASC
③实现对报警信息(TYPENAME)内容分组统计,且获取最小开始时间(CreationTimeStart)、最大结束时间(CreationTime)差值(对差值保留2位小数)效果。
SELECT
*
FROM
(
SELECT
DeviceNumber DeviceNumber1,
DeviceName DeviceName1,
DeviceType DeviceType1,
TypeName AlarmInfo1,
AlarmNumber AlarmNumber1,
TO_CHAR( ( ( PerGroupMaxEndTime - PerGroupMinStartTime ) * 24 ), 'FM9990.00' ) AffectMinutes1
FROM
(
SELECT
DeviceNumber,
DeviceName,
DeviceType,
TypeName,
COUNT( TypeName ) AlarmNumber,
MIN( CreationTimeStart ) PerGroupMinStartTime,
MAX( CreationTime ) PerGroupMaxEndTime
FROM
(
SELECT
*
FROM
DEVICEALARM
WHERE
DeviceNumber IN ( 'C1_02_01' )
AND TYPENAME LIKE '%1管%'
AND CreationTimeStart BETWEEN TO_DATE( '2021-09-28 08:00:00', 'yyyy-MM-dd hh24:mi:ss' )
AND TO_DATE( '2021-09-28 19:59:59', 'yyyy-MM-dd hh24:mi:ss' )
)
GROUP BY
DeviceNumber,
DeviceName,
DeviceType,
TypeName
ORDER BY
DeviceNumber ASC,
TypeName ASC
)
)
WHERE
AffectMinutes1 >0
更多推荐
所有评论(0)