[sql][redshift]常用函数

本文详细介绍了SQL中的百分位连续计算函数PERCENTILE_CONT的使用方法,包括其参数要求及返回值类型。此外,还展示了如何利用SQL进行日期时间的转换与计算,如日期加减、字符转日期等,适用于数据分析师和技术人员。

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

PERCENTILE_CONT

http://www.maomao365.com/?p=6254
PERCENTILE_CONT(<表达式1>)
WITHIN GROUP(ORDER BY <表达式2> [ ASC | DESC ] )
OVER (< partition by 表达式3> )
参数:表达式1:
此处只能输入一个大于等于0 小于等于1的浮点数
如果输入null ,则返回错误提示信息
如果输入大于1 或小于0,则返回数据超过数据范围的提示信息
参数:表达式2:
排序字段,此处只可使用单个字段作为排序标准(默认值升序)
参数:表达式3
将结果集,以此为群组,进行多组结果集的百分比计算
返回值:
float(53)

SELECT DISTINCT *
FROM 
(SELECT shop_id, shop_name,
PERCENTILE_CONT(0.1) WITHIN GROUP(ORDER BY population DESC) OVER (PARTITION BY shop_id,shop_name) p01,
PERCENTILE_CONT(0.3) WITHIN GROUP(ORDER BY population DESC) OVER (PARTITION BY shop_id,shop_name) p03,
PERCENTILE_CONT(0.6) WITHIN GROUP(ORDER BY population DESC) OVER (PARTITION BY shop_id,shop_name) p06 
FROM analysis_1810.t_meshpoi_pop_2018_lonlat
WHERE shop_id IN ('174','175','25')
)

row_number()

row_number() over(partition by ic_infomation, dayflag order by popday)

date

#char -> date
select to_date('2004-11-27','yyyy-mm-dd');

#https://docs.aws.amazon.com/ja_jp/redshift/latest/dg/r_DATEADD_function.html
#DATEADD( datepart, interval, {date|timestamp} )
select dateadd(day,1,'20080228');


#TRUNC(timestamp): timestamp -> date
select trunc(dateadd(day,0,'20080228'));


# 20080101(char) -> 2008-01-01(date)
select date('20080101')

#ymd: char. 格式是'yyyymmdd'
#下面这条执行后,会计算ymd的前一天,返回类型是date
#如果ymd为'20191021',结果就是'2019-10-20'
trunc(dateadd(day,-1,to_date(ymd,'yyyymmdd'))),

time

我们有一个表,

drop table if exists analysis_201028_sbhorks.m_schedule;
create table analysis_201028_sbhorks.m_schedule(
	ymd varchar encode zstd, --20200903
	starttime varchar encode zstd, --18:00:00
	starthour varchar encode zstd, --18
	div varchar encode zstd --night
);

算出每一行的2小时前和5小时后。

select ymd+' '+starttime, 
dateadd(hour, -2, cast(ymd+' '+starttime as timestamp)),
dateadd(hour, 5, cast(ymd+' '+starttime as timestamp))
from analysis_201028_sbhorks.m_schedule

结果是这样的→

20190903-18:00:00	2019-09-03 16:00:00	2019-09-03 23:00:00
20190904-18:00:00	2019-09-04 16:00:00	2019-09-04 23:00:00
20190905-18:00:00	2019-09-05 16:00:00	2019-09-05 23:00:00
20190906-18:00:00	2019-09-06 16:00:00	2019-09-06 23:00:00

time diff

having datediff(second, CONVERT(TIME, min(logtime)),CONVERT(TIME, max(logtime)))>=600 --10分以上滞在

不足位补零

https://bbs.youkuaiyun.com/topics/80287191

select right('0000' + cast(123 as varchar(10)),4) 
;
select right('0000' + '123',4) 
;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值