Files
aiform_prod/docs/SQL_CLEANUP_DOCUMENTS_META_DUPLICATES.sql

37 lines
1.3 KiB
MySQL
Raw Normal View History

-- ============================================================================
-- SQL для очистки дубликатов в documents_meta
-- ============================================================================
-- Удаляет дубликаты, оставляя только самую новую запись для каждого field_name
-- ============================================================================
-- $1 = claim_id (UUID)
UPDATE clpr_claims
SET payload = jsonb_set(
payload,
'{documents_meta}',
(
SELECT COALESCE(jsonb_agg(doc ORDER BY (doc->>'uploaded_at') DESC NULLS LAST), '[]'::jsonb)
FROM (
SELECT DISTINCT ON (doc->>'field_name') doc
FROM jsonb_array_elements(COALESCE(payload->'documents_meta', '[]'::jsonb)) AS doc
ORDER BY
doc->>'field_name',
-- Приоритет: записи с file_url важнее, потом по дате
CASE WHEN doc->>'file_url' IS NOT NULL AND doc->>'file_url' <> '' THEN 0 ELSE 1 END,
(doc->>'uploaded_at') DESC NULLS LAST
) unique_docs
),
true
),
updated_at = now()
WHERE id = $1
RETURNING
id,
jsonb_array_length(payload->'documents_meta') AS documents_meta_count,
(
SELECT jsonb_agg(doc->>'field_name')
FROM jsonb_array_elements(payload->'documents_meta') AS doc
) AS field_names;