一、实现效果

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
Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐