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;
|
|
"""
|