我正在执行查询以返回给定时间范围内的所有记录。在提取的这些记录中,我想检查多个JSON记录中某个属性是否存在重复值,以及是否存在多个值,然后执行额外的处理。
我的代码是:
SELECT jsonb_build_object('ID', t.col ->> 'id',
'Number', t.col ->> 'num',
'True/False', t.col ->> 'active',
'Type', x.elem ->> 'type')
FROM tbl t
CROSS JOIN LATERAL (
SELECT elem
FROM jsonb_array_elements(t.col -> 'array1') a(elem)
WHERE a.elem ->> 'date' between '01012019' and '01022019'
AND a.elem ->> 'type' = 'Good' OR a.elem ->> 'type' = 'Bad'
ORDER BY a.elem ->> 'date' DESC NULLS LAST
LIMIT 1
) x;
上面的查询从给定的时间范围内提取我想要的所有记录,但是'id'字段可以在多个记录中具有相同的值。我想根据最新的“日期”提取“ id”记录,并从数据输出中删除重复的“ id”记录。
期望的输出在所有记录中应具有所有唯一的“ id”值,但每条记录将具有基于最高“日期”值的最新“ array1”数据。