我正在尝试基于自定义字段“ci_ku”检索记录。对于相同的“ci_ku”值,我们将有多个“l1m_visors”,我希望检索每个“ci_ku”的最小值“l1mvisors”。
示例数据:
Ku|ci_ku|l1M_visors
-|-|
1234-5678-HIJK|1234-HIJK|A
1234-9012-HIJK|1234-HIJK|B
预期产量:
Ku|ci_ku|l1M_visors
-|-|
1234-5678-HIJK|1234-HIJK|A
我尝试了下面的查询:
SELECT DISTINCT REGEXP_REPLACE(ku, CONCAT('-',CAST(v_nbr AS varchar)), '') AS ci_ku,
ku,
MIN(l1m_visits),
last_refresh_date
FROM db.schema.table
GROUP BY ci_ku;
并面临以下错误:
第1行:194:无法解析列‘ci_ku’
1条答案
按热度按时间w7t8yxp51#
触发该错误是因为在计算
GROUP BY
子句时尚未生成字段“ci_ku”。此外,您的查询中还存在其他一些问题:GROUP BY
子句中并非所有未聚合的行都存在(应包含“ku”和“last_REFRESH_DATE”)DISTINCT
关键字将删除重复行,尽管SELECT
语句后没有重复行。与使用聚合不同,
ROW_NUMBER
窗口函数可能会更快地获得结果。它将为您的每个“ci_ku”值(PARTITION BY ci_ku
)生成一个递增的数字,并按“l1M_ACCESSIONS”(ORDER BY ci_ku
)排序,这样等于1的行号将表示每个“ci_ku”的最小“l1M_ACCESSIONS”。如果您使用的是PostgreSQL,您还可以使用
FETCH n ROWS WITH TIES
子句来检索每个绑定行号的第一行(它将选择每个行号=1):