【发布时间】:2019-10-17 17:56:04
【问题描述】:
大家好,我看到有一些关于数组分组的问题,但没有一个问题(据我搜索)没有使用数组字段作为结果的过滤器!就我而言,我有一个地址数组,想按记录更新日期分组,并根据下面的查询仅查找家庭地址。
WITH last_update AS (SELECT
owner_id,
created_at,
MAX(updated_at) as updated_at
FROM
dataset.profile
GROUP BY
owner_id, created_at )
SELECT
profile.name ,
profile.emails ,
profile.phones ,
profile_addresses.city_name ,
profile_addresses.state_code,
FORMAT_TIMESTAMP('%Y-%m', last_update.created_at ) AS month
FROM dataset.profile AS profile
LEFT JOIN UNNEST(profile.addresses) as profile_addresses
INNER JOIN last_update ON profile.owner_id = last_update.owner_id and profile.updated_at = last_update.updated_at and profile.created_at = last_update.created_at
WHERE (profile.status = 'ACTIVE')
AND (profile_addresses.type = 'HOME')
GROUP BY 1,2,3,4,5,6
ORDER BY 6 DESC
无法检索数据 - 无法按 ARRAY 类型的表达式分组 [22:12] 允许
【问题讨论】:
-
很难从不工作的查询中对您的用例进行逆向工程 - 相反,您可以提供一些输入数据和预期结果的简化示例以及生成它的逻辑。我认为这将大大增加问题得到有意义的回答的机会
-
如果您删除
emails和phones(并更改 group/order by 语句),您的查询是否有效?我猜这些是类似于addresses的数组。 -
通过窗口函数获取最新的个人资料,然后从每个用户的最新个人资料中选择您需要的数据,也可能更容易/更清晰。
-
你为什么需要分组?