Redshift - Split_Part 和最小值

Posted

技术标签:

【中文标题】Redshift - Split_Part 和最小值【英文标题】:Redshift - Split_Part and minimum value 【发布时间】:2020-10-27 18:57:13 【问题描述】:

我在 Redshift 表 t1 的列中有一个日期列表,如下所示:

dates
2020-10-25,2020-10-26,2020-10-23,2020-10-24,2020-10-25,2020-10-24,2020-10-24,2020-10-24
2020-10-25,2020-10-26,2020-10-23,2020-10-24,2020-10-25

在选择数据时,我想添加一个字段 early_date = MIN 列日期中出现的所有日期。我尝试使用 split_part 但它需要一个“n”,即日期的位置,该位置会因行而异。

如何做到这一点?

【问题讨论】:

Redshift 不支持 ARRAY 运算符和函数 - 请参阅 Unsupported PostgreSQL functions 你能告诉日期列中的记录可以包含的最大日期数吗? 最大数字为 18 【参考方案1】:
create table numtable (id int) 

insert into numtable values (1) ,(2),(3),(4),(5),(6),(7),(8),(9),(10),
(11),(12),(13),(14),(15),(16),(17),(18)


select max(to_date(datestr,'yyyy-mm-dd'))
from
(
select id, split_part ('2020-10-25,2020-10-26,2020-10-23,2020-10-24,2020-10-25,2020-10-24,2020-10-24,2020-10-24
2020-10-25,2020-10-26,2020-10-23,2020-10-24,2020-10-25',',',id) datestr
from numtable
)
a

【讨论】:

【参考方案2】:

我终于使用了 UDF

CREATE FUNCTION min_date (po_datelist varchar) RETURNS varchar IMMUTABLE as $$
    
    def min_date(po_datelist):
        x=min(po_datelist.split(','))
        if x=='':
            return None
        else:
            return x
    return min_date(po_datelist)
        
$$ LANGUAGE plpythonu;

【讨论】:

以上是关于Redshift - Split_Part 和最小值的主要内容,如果未能解决你的问题,请参考以下文章

如何在 HIVE Sql 中使用 split_part 函数

vertica截取函数-split_part

将数据从 firebase 加载到 amazon redshift

在 Amazon Redshift 中是不是可以在两列上设置条件?

是否有任何适用于 AWS Redshift 的开源调度工具?

RedShift GROUP BY 常量列给出不一致的结果