eliminar claves duplicadas selectivamente

05/08/2008 - 21:42 por davidARROBAdavid.com | Informe spam
Estimados señores:

mi caso es este:

tengo una tabla con :

campo1,campo2,campo3,campo4

campo1+campo2+campo3, deben ser la clave unica, pero estan duplicadas,
aunque el campo4 no esta duplicado, justamente debo eliminar de entre todos
los grupos de registros en que se duplican las claves los valores de campo 4
que sean menores, es decir finalmente tiene que quedar un solo registro,
cuya clave sea campo1+campo2+campo3, y el campo 4 el de mayor importe(porque
lo que se almacena alli es un importe), alguien me puede ayudar u orientar
con una consulta SQL, que borre las filas cuyo campo (campo4), sea distinto
del mayor en una ocurrencia de n veces el campo (clave). O tal vez haya que
hacerlo por codigo

Atte.

David

Preguntas similare

Leer las respuestas

#1 Alejandro Mesa
06/08/2008 - 01:01 | Informe spam
Trata:

;with r_set
as
(
select
c1, c2, c3, c4,
row_number() over(partition by c1, c2, c3 order by c4 DESC) as rn
from
t
)
delete t
where rn > 1;
GO


AMB



"davidARROBAdavid.com" wrote:

Estimados señores:

mi caso es este:

tengo una tabla con :

campo1,campo2,campo3,campo4

campo1+campo2+campo3, deben ser la clave unica, pero estan duplicadas,
aunque el campo4 no esta duplicado, justamente debo eliminar de entre todos
los grupos de registros en que se duplican las claves los valores de campo 4
que sean menores, es decir finalmente tiene que quedar un solo registro,
cuya clave sea campo1+campo2+campo3, y el campo 4 el de mayor importe(porque
lo que se almacena alli es un importe), alguien me puede ayudar u orientar
con una consulta SQL, que borre las filas cuyo campo (campo4), sea distinto
del mayor en una ocurrencia de n veces el campo (clave). O tal vez haya que
hacerlo por codigo

Atte.

David




Respuesta Responder a este mensaje
#2 David
07/08/2008 - 02:20 | Informe spam
Gracias, alejandro, lo voy a probar
David
"Alejandro Mesa" escribió en el
mensaje news:
Trata:

;with r_set
as
(
select
c1, c2, c3, c4,
row_number() over(partition by c1, c2, c3 order by c4 DESC) as rn
from
t
)
delete t
where rn > 1;
GO


AMB



"davidARROBAdavid.com" wrote:

Estimados señores:

mi caso es este:

tengo una tabla con :

campo1,campo2,campo3,campo4

campo1+campo2+campo3, deben ser la clave unica, pero estan duplicadas,
aunque el campo4 no esta duplicado, justamente debo eliminar de entre
todos
los grupos de registros en que se duplican las claves los valores de
campo 4
que sean menores, es decir finalmente tiene que quedar un solo registro,
cuya clave sea campo1+campo2+campo3, y el campo 4 el de mayor
importe(porque
lo que se almacena alli es un importe), alguien me puede ayudar u
orientar
con una consulta SQL, que borre las filas cuyo campo (campo4), sea
distinto
del mayor en una ocurrencia de n veces el campo (clave). O tal vez haya
que
hacerlo por codigo

Atte.

David




Respuesta Responder a este mensaje
#3 Alejandro Mesa
07/08/2008 - 14:44 | Informe spam
Crrección:

Se debe eliminar usando la CTE.

;with r_set
as
(
select
c1, c2, c3, c4,
row_number() over(partition by c1, c2, c3 order by c4 DESC) as rn
from
t
)
delete r_set -- <<<<<<<<--
where rn > 1;
GO


AMB


"Alejandro Mesa" wrote:

Trata:

;with r_set
as
(
select
c1, c2, c3, c4,
row_number() over(partition by c1, c2, c3 order by c4 DESC) as rn
from
t
)
delete t
where rn > 1;
GO


AMB



"davidARROBAdavid.com" wrote:

> Estimados señores:
>
> mi caso es este:
>
> tengo una tabla con :
>
> campo1,campo2,campo3,campo4
>
> campo1+campo2+campo3, deben ser la clave unica, pero estan duplicadas,
> aunque el campo4 no esta duplicado, justamente debo eliminar de entre todos
> los grupos de registros en que se duplican las claves los valores de campo 4
> que sean menores, es decir finalmente tiene que quedar un solo registro,
> cuya clave sea campo1+campo2+campo3, y el campo 4 el de mayor importe(porque
> lo que se almacena alli es un importe), alguien me puede ayudar u orientar
> con una consulta SQL, que borre las filas cuyo campo (campo4), sea distinto
> del mayor en una ocurrencia de n veces el campo (clave). O tal vez haya que
> hacerlo por codigo
>
> Atte.
>
> David
>
>
>
>
Respuesta Responder a este mensaje
#4 David
08/08/2008 - 00:53 | Informe spam
Unoa sla cuestion mas:
así?

gracias.

David


"Alejandro Mesa" escribió en el
mensaje news:
Crrección:

Se debe eliminar usando la CTE.

;with r_set
as
(
select
c1, c2, c3, c4,
row_number() over(partition by c1, c2, c3 order by c4 DESC) as rn
from
t
)
delete r_set -- <<<<<<<<--
where rn > 1;
GO


AMB


"Alejandro Mesa" wrote:

Trata:

;with r_set
as
(
select
c1, c2, c3, c4,
row_number() over(partition by c1, c2, c3 order by c4 DESC) as rn
from
t
)
delete t
where rn > 1;
GO


AMB



"davidARROBAdavid.com" wrote:

> Estimados señores:
>
> mi caso es este:
>
> tengo una tabla con :
>
> campo1,campo2,campo3,campo4
>
> campo1+campo2+campo3, deben ser la clave unica, pero estan duplicadas,
> aunque el campo4 no esta duplicado, justamente debo eliminar de entre
> todos
> los grupos de registros en que se duplican las claves los valores de
> campo 4
> que sean menores, es decir finalmente tiene que quedar un solo
> registro,
> cuya clave sea campo1+campo2+campo3, y el campo 4 el de mayor
> importe(porque
> lo que se almacena alli es un importe), alguien me puede ayudar u
> orientar
> con una consulta SQL, que borre las filas cuyo campo (campo4), sea
> distinto
> del mayor en una ocurrencia de n veces el campo (clave). O tal vez haya
> que
> hacerlo por codigo
>
> Atte.
>
> David
>
>
>
>
Respuesta Responder a este mensaje
#5 Salvador Ramos
09/08/2008 - 20:22 | Informe spam
Hola,

Con el permiso de Alejandro,

Las líneas que empiezan por -- son líneas de comentarios. Las CTE's son una
novedad de SQL Server 2005, por tanto no funcionan en versiones anteriores,
pero si que te funcionará en SQL Server 2008 (que acaba de salir).

Un saludo
Salvador Ramos
Solid Quality Mentors (http://www.solidq.com)

www.helpdna.net (información sobre SQL Server y Microsoft .Net)
Visita mi nuevo blog: www.sqlserversi.com


"David" <dyn98arARROBAyahoo.com.ar> escribió en el mensaje
news:O70RsIO%
Unoa sla cuestion mas:
así?

gracias.

David


"Alejandro Mesa" escribió en el
mensaje news:
Crrección:

Se debe eliminar usando la CTE.

;with r_set
as
(
select
c1, c2, c3, c4,
row_number() over(partition by c1, c2, c3 order by c4 DESC) as rn
from
t
)
delete r_set -- <<<<<<<<--
where rn > 1;
GO


AMB


"Alejandro Mesa" wrote:

Trata:

;with r_set
as
(
select
c1, c2, c3, c4,
row_number() over(partition by c1, c2, c3 order by c4 DESC) as rn
from
t
)
delete t
where rn > 1;
GO


AMB



"davidARROBAdavid.com" wrote:

> Estimados señores:
>
> mi caso es este:
>
> tengo una tabla con :
>
> campo1,campo2,campo3,campo4
>
> campo1+campo2+campo3, deben ser la clave unica, pero estan duplicadas,
> aunque el campo4 no esta duplicado, justamente debo eliminar de entre
> todos
> los grupos de registros en que se duplican las claves los valores de
> campo 4
> que sean menores, es decir finalmente tiene que quedar un solo
> registro,
> cuya clave sea campo1+campo2+campo3, y el campo 4 el de mayor
> importe(porque
> lo que se almacena alli es un importe), alguien me puede ayudar u
> orientar
> con una consulta SQL, que borre las filas cuyo campo (campo4), sea
> distinto
> del mayor en una ocurrencia de n veces el campo (clave). O tal vez
> haya que
> hacerlo por codigo
>
> Atte.
>
> David
>
>
>
>






Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente Respuesta Tengo una respuesta
Search Busqueda sugerida