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