Exact duplicates: one click
When you open a file here, QueryLocal immediately runs SELECT DISTINCT * FROM data: every row appears once, whatever the number of copies in the original. The summary line tells you how many rows remain — compare it with the row count shown above to know how many duplicates were removed. Then click Download.
Duplicates on one column (e.g. same email)
Often rows are "the same" without being identical — the same customer exported twice with a different timestamp. To keep one row per email, keeping the first occurrence:
SELECT *
FROM data
WHERE rowid IN (
SELECT MIN(rowid) FROM data GROUP BY lower(trim(email))
);
lower(trim(...)) makes John@Mail.com and john@mail.com count as the same address. Replace email with your column name (the list of columns is shown after loading).
See the duplicates before deleting them
SELECT email, COUNT(*) AS copies
FROM data
GROUP BY email
HAVING COUNT(*) > 1
ORDER BY copies DESC;
This lists every value that appears more than once, with its number of copies — handy to understand where the duplicates come from before cleaning.
Other free CSV tools
Frequently asked questions
Does it keep the original order?
DISTINCT keeps the first occurrence of each row. To be certain of the order, add ORDER BY rowid at the end of the query.
Are rows with different upper/lower case treated as duplicates?
Not with DISTINCT, which compares exactly. Use the one-column query above with lower(trim(column)) to ignore case and stray spaces.
Is there a size limit?
No fixed limit: files of hundreds of MB work on a normal computer. Everything happens in your browser, so nothing is uploaded.