如何将 Oracle 代码中的 max 转换为 BigQuery



如何将下面的 Oracle 代码转换为 BigQuery?

max(to_date(BIC_GM_AGCPOAODS00_BO_VW.BOUND_DATE,'yyyymmdd'))

当我尝试此代码时:

SELECT A._BIC_GCISBN,
max(cast(A.BOUND_DATE as date),'yyyymmdd')
FROM `BIC_GM_AGCPOAODS00_BO_VW`  A
WHERE A._BIC_ZC2GRIRIN  = 'G' AND A._BIC_ZCLOEKZ  = ' '  
GROUP BY A._BIC_GCISBN

我收到错误:

对于参数类型的聚合函数 MAX 没有匹配的签名:日期、字符串。支持的签名:最大(任意( 在 [15:2]

在 BigQuery 中,您需要parse_date()

SELECT A._BIC_GCISBN,
MAX(PARSE_DATE('%Y%m%d', A.BOUND_DATE))
FROM `BIC_GM_AGCPOAODS00_BO_VW`A
WHERE A._BIC_ZC2GRIRIN  = 'G' AND A._BIC_ZCLOEKZ  = ' '  
GROUP BY A._BIC_GCISBN;

您应该使用date来存储值,但有时我们无法控制数据的存储方式。

编辑:

给定您的数据格式,您也可以将其编写为:

SELECT A._BIC_GCISBN,
PARSE_DATE('%Y%m%d', MAX(A.BOUND_DATE))
FROM `BIC_GM_AGCPOAODS00_BO_VW`A
WHERE A._BIC_ZC2GRIRIN  = 'G' AND A._BIC_ZCLOEKZ  = ' '  
GROUP BY A._BIC_GCISBN;

我更喜欢第一个版本,因为它很容易推广到任何数据格式。 这可能更有效。

最新更新