26 lines
1.9 KiB
SQL
26 lines
1.9 KiB
SQL
with timelineItems as (select jsonb_array_elements(raw_files.json -> 'timelineItems') as timelineItem
|
|
from raw_files
|
|
where date = ANY ($1)),
|
|
places as (select distinct on (md5(timelineItem ->> 'place' :: text)) timelineItem -> 'place' as place,
|
|
timelineItem -> 'place' ->> 'placeId' as placeId,
|
|
(timelineItem -> 'place' ->> 'lastSaved') :: timestamptz as lastSaved
|
|
from timelineItems
|
|
where timelineItem ->> 'place' is not null),
|
|
places_with_max_last_saved as (select place -> 'placeId' as placeId,
|
|
max((place ->> 'lastSaved') :: timestamptz) as latest_last_saved
|
|
from places
|
|
group by place -> 'placeId'),
|
|
latest_places as (select places.*
|
|
from places_with_max_last_saved
|
|
inner join places on places.place -> 'placeId' = places_with_max_last_saved.placeId and
|
|
places.lastSaved =
|
|
places_with_max_last_saved.latest_last_saved)
|
|
insert
|
|
into public.place (place_id, json, last_saved, server_last_updated)
|
|
select (placeId :: uuid) as place_id, place as json, lastSaved as last_saved, now() as server_last_updated
|
|
from latest_places
|
|
on conflict (place_id) do update set json = excluded.json,
|
|
last_saved = excluded.last_saved,
|
|
server_last_updated = excluded.server_last_updated
|
|
where excluded.last_saved > public.place.last_saved;
|