Portál AbcLinuxu, 6. května 2025 09:28
Řešení dotazu:
with cte as ( select id, row_number() over(order by id, partition by id, a, b, c) pid from table ) delete t from table as t inner join cte on cte.id = t.id where pid <> 0;btw to cte je tam zbytečný
delete t from table as t inner join ( select id, row_number() over(order by id, partition by id, a, b, c) pid from table ) as x on x.id = t.id where x.pid <> 1
V poho, nepustil sem to do vostrejch dat :)bez rollbacku ani ránu ) druhej pokus:
delete t from table as t inner join ( select id, row_number() over(order by id, partition by id, a, b, c) pid from table ) as x on x.id = t.id inner join ( select id, row_number() over(order by id, partition by id, a, b, c) pid from table ) as y on y.id = x.id and y.pid < x.pid where y.pid <> 0za předpokladu, že databáze ví který (fyzický) záznamy to vlastně joinuje (na MSSQL se mi to experimentálně potvrdit nepodařilo, ale asi dělam něco blbě) takže řešením (bez OIDů a CTIDů) by bylo přidat soupec, oupdatovat pomocí ROW_NUMBER a pak nemazat nejnižší hodnotu
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.