这是jsonb
字段数据:
[
{'name': 'pratha', 'email': 'p@g.com', 'sub': { 'id': 1 } },
{'name': 'pratha', 'email': 'c@d.com', 'sub': { 'id': 2 } }
]
当我想获取name
和email
字段时,我得到重复的字段。
这是查询:
SELECT jae.e->>'name', jae.e->>'email'
FROM survey_results sr
CROSS JOIN LATERAL jsonb_array_elements(sr.data_field) jae (e)
GROUP BY jae.e->>'name', jae.e->>'email'
在此数据中,两个对象的name
均为pratha
,但电子邮件有所不同。我要抢的是一个pratha
和最新的email
数组。
有可能吗?
实际结果:
pratha p@g.com
pratha c@d.com
预期结果:
pratha c@d.com
我只需要名称和电子邮件字段,因此,我想按名称对它们进行分组。
答案 0 :(得分:1)
您尚未解释“最新电子邮件” 的含义,但我想您希望获得最高sub->id
您可以使用DISTINCT ON
获得最高的成绩。
SELECT DISTINCT ON (jae.e->>'name') --for every name
jae.e->>'name' as name,
jae.e->>'email' as email
FROM survey_results sr
CROSS JOIN LATERAL jsonb_array_elements(sr.data_field) jae (e)
ORDER BY jae.e->>'name', jae.e->'sub'->>'id' desc
--^ return only the row with the highest id