常用sql

这篇博客主要介绍了如何进行SQL表的备份操作,并探讨了在PostgreSQL中如何计算时间线上的最大间隔时间,同时涉及到分类汇总和行合并的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

备份表

--创建表结构
create table dwd_wind_fact_downtime_20210709 as select * from dwd_wind_fact_downtime where 1=2;
--备份指定数据
insert into dwd_wind_fact_downtime_20210709 select * from dwd_wind_fact_downtime -- Where [条件1,条件2] 

时间线上最大间隔时间(pgsql)

with t1 as(
SELECT
	--r.region_name,
	--wf.site_name,
	--wt.feedline_name,
	--wt.wtg_type,
--	wt.wtg_name,
--	wt.on_grid_date,
	wtsr.start_time,
	wtsr.end_time,
	--wtsr.description,
	COALESCE ( wt.wtg_id_yj, wt.wtg_id ) AS wtg_id,
	--wt.feedline_id,
	wt.brand,
	ROW_NUMBER() OVER (PARTITION BY wt.brand ORDER BY wtsr.start_time)RowNum
FROM
	dim_wind_device wt
	LEFT JOIN (
	SELECT
		e.wtg_id wtg_id,
		e.start_time,
		COALESCE ( e.end_time, now( ) ) end_time,
		dwdr.description 
	FROM
		dwd_wind_fact_downtime e
		LEFT JOIN dim_wind_sc_template dwdr ON e.sc_id = dwdr.sc_id 
		AND e.plc_version = dwdr.plc_version 
	WHERE
		e.start_time >= '2021-01-01 00:00:00' 
		AND e.start_time <= '2021-07-07 00:00:00'
		AND (
			( e.end_time IS NULL AND e.start_time < now( ) - INTERVAL '10 minutes' ) 
			OR e.start_time < e.end_time - INTERVAL '10 minutes' 
		) 
		AND e.system_id IN ( 2 ) 
	ORDER BY
		e.wtg_id,
		e.start_time 
	) wtsr ON wt.wtg_id = wtsr.wtg_id
	LEFT JOIN ( SELECT dp.phase_id, dc.control_type FROM dim_wind_phase dp LEFT JOIN dim_system_company dc ON dp.company_id = dc.company_id ) dt ON wt.phase_id = dt.phase_id
	LEFT JOIN dim_wind_feedline wl ON wt.feedline_id = wl.feedline_id
	LEFT JOIN dim_wind_site wf ON wt.site_id = wf.site_id
	LEFT JOIN dim_wind_region r ON wf.state_name = r.region_name 
WHERE
	wt.wtg_id_yj IS NOT NULL 
	AND dt.control_type <> '3'
	--and wt.brand='联合动力'
	 --and wt.wtg_id='026C7RW1'
	 --ORDER BY wtsr.start_time
	--limit 100
	)
	,t3 as(--之间
	SELECT t1.*,t2.start_time n_start_time,date_part('epoch',t2.start_time-t1.end_time)/3600 diff from t1 JOIN t1 as t2 on t1.rownum+1=t2.rownum and t1.wtg_id=t2.wtg_id)
	,m1 as(--首
	SELECT DISTINCT on(brand)brand,start_time,end_time,date_part('epoch',start_time-'2021-01-01 00:00:00')/3600 diff from t3 ORDER BY brand,start_time asc)
	,m2 as(--尾
	SELECT DISTINCT on(brand)brand,start_time,end_time,date_part('epoch','2021-07-07 00:00:00'-end_time)/3600 diff from t3 ORDER BY brand,start_time desc)
	,t4 as(SELECT brand,start_time,end_time,diff from t3 UNION ALL SELECT * from m1 UNION ALL SELECT * from m2)
	SELECT * from (SELECT brand,max(diff)diff from t4 GROUP BY brand)t ORDER BY diff desc

分类汇总合并行

SELECT array_to_string(array_agg(state_name||'('||round(loss_power/10000,0)||')'),'、')主要限电地区 from t;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值