44 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			Python
		
	
	
	
			
		
		
	
	
			44 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			Python
		
	
	
	
# 一些sql语句
 | 
						|
 | 
						|
duration_hour_one_equip = """
 | 
						|
WITH time_data AS (
 | 
						|
	SELECT
 | 
						|
		TO_CHAR( G.TIMEX, 'YYYY-MM-DD HH24:MI:SS' ) AS TIMEX 
 | 
						|
	FROM
 | 
						|
		generate_series ( '{start_time}' :: TIMESTAMP, '{end_time}' :: TIMESTAMP, '1 minute' ) G ( TIMEX ) 
 | 
						|
	),
 | 
						|
	ev_data AS (
 | 
						|
	SELECT
 | 
						|
		TO_CHAR( time_bucket ( '1 minute', TIMEX ) AT TIME ZONE'Asia/Shanghai', 'YYYY-MM-DD HH24:MI:SS' ) AS timex,
 | 
						|
		MAX ( running_state ) AS running_state,
 | 
						|
        AVG ( tsp ) AS avg_tsp 
 | 
						|
	FROM
 | 
						|
		enp_envdata envdata 
 | 
						|
	WHERE
 | 
						|
		envdata.equipment_id = '{equipment_id}' 
 | 
						|
		AND envdata.TIMEX AT TIME ZONE'Asia/Shanghai' >= '{start_time}' 
 | 
						|
		AND envdata.TIMEX AT TIME ZONE'Asia/Shanghai' <= '{end_time}'
 | 
						|
	GROUP BY
 | 
						|
		time_bucket ( '1 minute', TIMEX ) AT TIME ZONE'Asia/Shanghai' 
 | 
						|
	ORDER BY
 | 
						|
		timex 
 | 
						|
	),
 | 
						|
	state_d AS (
 | 
						|
	SELECT 
 | 
						|
    avg_tsp,
 | 
						|
	COALESCE
 | 
						|
		( ed.running_state, 50 ) AS running_state 
 | 
						|
	FROM
 | 
						|
		time_data td
 | 
						|
		LEFT JOIN ev_data ed ON ed.timex = td.timex 
 | 
						|
	ORDER BY
 | 
						|
		td.timex 
 | 
						|
	) SELECT
 | 
						|
    ROUND( cast(AVG ( avg_tsp ) as numeric), 4) AS avg_tsp,
 | 
						|
	ROUND( SUM ( CASE WHEN running_state = 10 THEN 1 ELSE 0 END ) / 60.0, 2 ) AS duration_run,
 | 
						|
	ROUND( SUM ( CASE WHEN running_state = 30 THEN 1 ELSE 0 END ) / 60.0, 2 ) AS duration_stop,
 | 
						|
	ROUND( SUM ( CASE WHEN running_state = 50 THEN 1 ELSE 0 END ) / 60.0, 2 ) AS duration_offline 
 | 
						|
FROM
 | 
						|
	state_d;
 | 
						|
"""
 |