Steuerkram/migrations/051_bank_transactions_unique.sql

22 lines
919 B
SQL

-- Duplikate entfernen: pro Gruppe (buchungstag, wertstellung, wert, buchungstext) die niedrigste id behalten
DELETE bt
FROM bank_transactions bt
INNER JOIN (
SELECT MIN(id) AS keep_id, buchungstag, wertstellung, wert, buchungstext
FROM bank_transactions
GROUP BY buchungstag, wertstellung, wert, buchungstext
HAVING COUNT(*) > 1
) dup ON bt.buchungstag = dup.buchungstag
AND bt.wertstellung = dup.wertstellung
AND bt.wert = dup.wert
AND bt.buchungstext = dup.buchungstext
AND bt.id > dup.keep_id;
-- Unvollständige Batches entfernen (row_count stimmt nicht mit tatsächlichen Zeilen überein)
DELETE FROM bank_import_batches
WHERE id NOT IN (SELECT DISTINCT batch_id FROM bank_transactions)
AND row_count > 0;
-- UNIQUE-Constraint gegen Doppel-Importe
ALTER TABLE bank_transactions
ADD CONSTRAINT uq_bank_tx UNIQUE (buchungstag, wertstellung, wert, buchungstext(200));