Мое поле json выглядит примерно так
{
"Ui": [
{
"element": "TG1",
"mention": "in",
"time": 123
},
{
"element": "TG1",
"mention": "out",
"time": 125
},
{ "element": "TG2",
"mention": "in",
"time": 251
},
{
"element": "TG2",
"mention": "out",
"time": 259
},
{ "element": "TG2",
"mention": "in",
"time": 251
}
]
}
Я пытаюсь получить сумму разницы времени на элемент, как показано ниже
| element | Timespent |
| TG1 | 2 |
| TG2 | 8 |
Проблема в идеале дляв каждом элементе «in» должен быть элемент «out», что явно не так в приведенном выше примере.Я хочу только рассчитать разницу этой пары значений и игнорировать любое значение, которое не соответствует входу in. Как я могу это сделать?
Ниже приведено то, что я использую, чтобы получить времяразница
select element, sum(time) as time_spent
from my_table
cross join lateral (
select
value->>'element' as element,
case value->>'mention' when 'in' then -(value->>'time')::numeric else (value->>'time')::numeric end as time
from json_array_elements(json_column->'Ui')) as elements
group by 1
order by 1