Gary O'Brien wrote: > Greetings, > > I'd like to know if anyone has an elegant solution to > the problem stated below. I know it could be brute > forced but it seems that there should be an elegant > SQL solution to this problem. > > Given the following table and data, I'd like to remove > all items with duplicate types within a container, > keeping the most recent (largest item_id) item of that > type within each container. > > Note that the column other_data is included only as a > reminder that the rows aren't necessarily identical. > > Any help would be appreciated. > > Regards, > Gary O'Brien > > > DROP TABLE IF EXISTS item; > > CREATE TABLE item ( > item_id INTEGER PRIMARY KEY, > type INTEGER NOT NULL DEFAULT 0, > other_data INTEGER NOT NULL DEFAULT 0, > container_id INTEGER NOT NULL > ); > > INSERT INTO item (type, container_id) VALUES (0, 1); > INSERT INTO item (type, container_id) VALUES (1, 1); > INSERT INTO item (type, container_id) VALUES (0, 2); > INSERT INTO item (type, container_id) VALUES (1, 2); > INSERT INTO item (type, container_id) VALUES (0, 3); > INSERT INTO item (type, container_id) VALUES (1, 3); > > INSERT INTO item (type, container_id) VALUES (0, 1); > INSERT INTO item (type, container_id) VALUES (1, 1); > INSERT INTO item (type, container_id) VALUES (0, 2); > INSERT INTO item (type, container_id) VALUES (1, 2); > > INSERT INTO item (type, container_id) VALUES (0, 1); > INSERT INTO item (type, container_id) VALUES (1, 1); > > > Before the delete operation: > > SELECT item_id, type, container_id FROM item; > > 1|0|1 > 2|1|1 > 3|0|2 > 4|1|2 > 5|0|3 > 6|1|3 > 7|0|1 > 8|1|1 > 9|0|2 > 10|1|2 > 11|0|1 > 12|1|1 > > After the delete operation: > > SELECT item_id, type, container_id from item; > > 5|0|3 > 6|1|3 > 9|0|2 > 10|1|2 > 11|0|1 > 12|1|1 > _______________________________________________ > sqlite-users mailing list > sqlite-users@sqlite.org > http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users > > The following works for me
delete from item where rowid not in ( select rowid from item group by type, container_id having max(item_id) ) Regards Lawrence Chitty _______________________________________________ sqlite-users mailing list sqlite-users@sqlite.org http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users