eliminar duplicados ojala solo fuera eso!!

30/11/2007 - 14:56 por gandy | Informe spam
El caso es que tengo una tabla donde sé que 5 campos hacen un unique o un PK.
pero como la base de datos abastece un robot, el cual por error hace que
esos 5 campos (que me dan el unique o el PK) se puedan repetir, ya que el
error mencionado cambia otros campos.
puedo eliminar los diplicados/triplicados... pero necesito volver a poner
esos campos en su sitio pero sin que esten repetidos.
busco los duplicados reales asi:
select tempo, id_h, cod_porta_stampo, stampo, num_carosello, count (*) repes
into colate_doble
from porsi_de_resultados
group by tempo, id_h, cod_porta_stampo, stampo, num_carosello
having count(*)>1
Pero el problema aparece cuando quiero meter el registro único y bueno con
todos sus campos, ya que para la data base los distintos son otros, ya que
altera campos por el error.
Me lio, el caso es que no sé como poder coger los registros completos de la
base de datos colate una sola vez de los duplicados para luego volverlos a
meter en la base de datos colate.

Preguntas similare

Leer las respuestas

#1 Gux (MVP)
30/11/2007 - 15:51 | Informe spam
Lamento no haber entendido demasiado su mensaje.

Por favor puede mostrar un ejemplo con datos de lo que tiene y lo que quiere
obtener?

Gustavo Larriera, Microsoft MVP
https://mvp.support.microsoft.com/profile/gux
Este mensaje se proporciona tal como es, sin garantías de ninguna clase.



"gandy" wrote:

El caso es que tengo una tabla donde sé que 5 campos hacen un unique o un PK.
pero como la base de datos abastece un robot, el cual por error hace que
esos 5 campos (que me dan el unique o el PK) se puedan repetir, ya que el
error mencionado cambia otros campos.
puedo eliminar los diplicados/triplicados... pero necesito volver a poner
esos campos en su sitio pero sin que esten repetidos.
busco los duplicados reales asi:
select tempo, id_h, cod_porta_stampo, stampo, num_carosello, count (*) repes
into colate_doble
from porsi_de_resultados
group by tempo, id_h, cod_porta_stampo, stampo, num_carosello
having count(*)>1
Pero el problema aparece cuando quiero meter el registro único y bueno con
todos sus campos, ya que para la data base los distintos son otros, ya que
altera campos por el error.
Me lio, el caso es que no sé como poder coger los registros completos de la
base de datos colate una sola vez de los duplicados para luego volverlos a
meter en la base de datos colate.
Respuesta Responder a este mensaje
#2 Alejandro Mesa
30/11/2007 - 18:44 | Informe spam
gandy,

Ademas de lo mencionado por Gustavo, seria de ayuda si mencionas la version
que usas de SQL Server. Ademas, cual criterio usar para escojer la fila con
la que deseas quedarte, en el caso de los duplicados. Por ejemplo, quedarse
con la fila que tiene mayor valor en la columna [tempo].


AMB

"gandy" wrote:

El caso es que tengo una tabla donde sé que 5 campos hacen un unique o un PK.
pero como la base de datos abastece un robot, el cual por error hace que
esos 5 campos (que me dan el unique o el PK) se puedan repetir, ya que el
error mencionado cambia otros campos.
puedo eliminar los diplicados/triplicados... pero necesito volver a poner
esos campos en su sitio pero sin que esten repetidos.
busco los duplicados reales asi:
select tempo, id_h, cod_porta_stampo, stampo, num_carosello, count (*) repes
into colate_doble
from porsi_de_resultados
group by tempo, id_h, cod_porta_stampo, stampo, num_carosello
having count(*)>1
Pero el problema aparece cuando quiero meter el registro único y bueno con
todos sus campos, ya que para la data base los distintos son otros, ya que
altera campos por el error.
Me lio, el caso es que no sé como poder coger los registros completos de la
base de datos colate una sola vez de los duplicados para luego volverlos a
meter en la base de datos colate.
Respuesta Responder a este mensaje
#3 gandy
03/12/2007 - 09:57 | Informe spam
Hola,

colate es así; [tempo], [stampo], [nome_prodotto], [id_h],
[tempo_preparazione_s], [num_extra_time], [err_in_colata_prec], [barcode],
[tempo_ricetta], [num_macchina], [num_testa], [num_prog], [num_col_mac],
[num_col_tes], [port_iso_set], [port_pol1_set], [port_pol2_set],
[port_cat_set], [pres_iso_set], [pres_pol1_set], [pres_pol2_set],
[pres_cat_set], [temp_iso_set], [temp_pol1_set], [temp_pol2_set],
[temp_cat_set], [peso_col_set], [port_iso_real], [port_pol1_real],
[port_pol2_real], [port_cat_real], [pres_iso_real], [pres_pol1_real],
[pres_pol2_real], [pres_cat_real], [temp_iso_real], [temp_pol1_real],
[temp_pol2_real], [temp_cat_real], [peso_col_real], [port_iso_all],
[port_pol1_all], [port_pol2_all], [port_cat_all], [pres_iso_all],
[pres_pol1_all], [pres_pol2_all], [pres_cat_all], [temp_iso_all],
[temp_pol1_all], [temp_pol2_all], [temp_cat_all], [peso_col_all],
[col_senza_all], [peso_col_iso], [peso_col_pol1], [peso_col_pol2],
[peso_col_cat], [num_carosello], [cod_porta_stampo], [cod_stampo_a],
[cod_stampo_b], [idasa]

si hago
- Select distinct from colate
me da los registros distintos, 1850
Si hago
- select tempo,id_h,cod_porta_stampo, stampo, num_carosello, count (*)
RESPES
from colate
group by tempo,id_h,cod_porta_stampo, stampo, num_carosello
having count (*)>1
Me dice dice que 650, que se repiten entre 6, 2, 3 cada uno de ellos.
Quiero coger el resultado de esta select pero con todos los campos y
meterlos en una tabla temporal, para poder eliminar sin problemas de colate
los duplicados y luego volver a meter estos datos sin el campo "repes" en
colate, para así tener todos los campos pero sin duplicados.

Gracias,

"Alejandro Mesa" wrote:

gandy,

Ademas de lo mencionado por Gustavo, seria de ayuda si mencionas la version
que usas de SQL Server. Ademas, cual criterio usar para escojer la fila con
la que deseas quedarte, en el caso de los duplicados. Por ejemplo, quedarse
con la fila que tiene mayor valor en la columna [tempo].


AMB

"gandy" wrote:

> El caso es que tengo una tabla donde sé que 5 campos hacen un unique o un PK.
> pero como la base de datos abastece un robot, el cual por error hace que
> esos 5 campos (que me dan el unique o el PK) se puedan repetir, ya que el
> error mencionado cambia otros campos.
> puedo eliminar los diplicados/triplicados... pero necesito volver a poner
> esos campos en su sitio pero sin que esten repetidos.
> busco los duplicados reales asi:
> select tempo, id_h, cod_porta_stampo, stampo, num_carosello, count (*) repes
> into colate_doble
> from porsi_de_resultados
> group by tempo, id_h, cod_porta_stampo, stampo, num_carosello
> having count(*)>1
> Pero el problema aparece cuando quiero meter el registro único y bueno con
> todos sus campos, ya que para la data base los distintos son otros, ya que
> altera campos por el error.
> Me lio, el caso es que no sé como poder coger los registros completos de la
> base de datos colate una sola vez de los duplicados para luego volverlos a
> meter en la base de datos colate.
Respuesta Responder a este mensaje
#4 Alejandro Mesa
03/12/2007 - 15:51 | Informe spam
gandy,

Te hago la misma pregunta, si existen filas repetidas, entonces cual
criterio usar para escoger una de esas filas para que nos quedemos con ella y
desechar el resto?

Ejemplo:

Si existen filas repetidas por [c1], escojer la que mayor valor de [dt] tenga.

create table dbo.t1 (
c1 int not null,
dt datetime not null
)

insert into dbo.t1 values(1, '20071203')
insert into dbo.t1 values(1, '20071204')
insert into dbo.t1 values(2, '20071205')

;with cte
as
(
select *, row_number() over(partition by c1 order by dt DESC) as rn
from dbo.t1
)
delete cte
where rn > 2

select * from dbo.t1

drop table dbo.t1
go


AMB

"gandy" wrote:

Hola,

colate es así; [tempo], [stampo], [nome_prodotto], [id_h],
[tempo_preparazione_s], [num_extra_time], [err_in_colata_prec], [barcode],
[tempo_ricetta], [num_macchina], [num_testa], [num_prog], [num_col_mac],
[num_col_tes], [port_iso_set], [port_pol1_set], [port_pol2_set],
[port_cat_set], [pres_iso_set], [pres_pol1_set], [pres_pol2_set],
[pres_cat_set], [temp_iso_set], [temp_pol1_set], [temp_pol2_set],
[temp_cat_set], [peso_col_set], [port_iso_real], [port_pol1_real],
[port_pol2_real], [port_cat_real], [pres_iso_real], [pres_pol1_real],
[pres_pol2_real], [pres_cat_real], [temp_iso_real], [temp_pol1_real],
[temp_pol2_real], [temp_cat_real], [peso_col_real], [port_iso_all],
[port_pol1_all], [port_pol2_all], [port_cat_all], [pres_iso_all],
[pres_pol1_all], [pres_pol2_all], [pres_cat_all], [temp_iso_all],
[temp_pol1_all], [temp_pol2_all], [temp_cat_all], [peso_col_all],
[col_senza_all], [peso_col_iso], [peso_col_pol1], [peso_col_pol2],
[peso_col_cat], [num_carosello], [cod_porta_stampo], [cod_stampo_a],
[cod_stampo_b], [idasa]

si hago
- Select distinct from colate
me da los registros distintos, 1850
Si hago
- select tempo,id_h,cod_porta_stampo, stampo, num_carosello, count (*)
RESPES
from colate
group by tempo,id_h,cod_porta_stampo, stampo, num_carosello
having count (*)>1
Me dice dice que 650, que se repiten entre 6, 2, 3 cada uno de ellos.
Quiero coger el resultado de esta select pero con todos los campos y
meterlos en una tabla temporal, para poder eliminar sin problemas de colate
los duplicados y luego volver a meter estos datos sin el campo "repes" en
colate, para así tener todos los campos pero sin duplicados.

Gracias,

"Alejandro Mesa" wrote:

> gandy,
>
> Ademas de lo mencionado por Gustavo, seria de ayuda si mencionas la version
> que usas de SQL Server. Ademas, cual criterio usar para escojer la fila con
> la que deseas quedarte, en el caso de los duplicados. Por ejemplo, quedarse
> con la fila que tiene mayor valor en la columna [tempo].
>
>
> AMB
>
> "gandy" wrote:
>
> > El caso es que tengo una tabla donde sé que 5 campos hacen un unique o un PK.
> > pero como la base de datos abastece un robot, el cual por error hace que
> > esos 5 campos (que me dan el unique o el PK) se puedan repetir, ya que el
> > error mencionado cambia otros campos.
> > puedo eliminar los diplicados/triplicados... pero necesito volver a poner
> > esos campos en su sitio pero sin que esten repetidos.
> > busco los duplicados reales asi:
> > select tempo, id_h, cod_porta_stampo, stampo, num_carosello, count (*) repes
> > into colate_doble
> > from porsi_de_resultados
> > group by tempo, id_h, cod_porta_stampo, stampo, num_carosello
> > having count(*)>1
> > Pero el problema aparece cuando quiero meter el registro único y bueno con
> > todos sus campos, ya que para la data base los distintos son otros, ya que
> > altera campos por el error.
> > Me lio, el caso es que no sé como poder coger los registros completos de la
> > base de datos colate una sola vez de los duplicados para luego volverlos a
> > meter en la base de datos colate.
Respuesta Responder a este mensaje
#5 gandy
03/12/2007 - 16:24 | Informe spam
Efectivamente, esxiten filas repetidas, y solo quiero tener una de esas
repetidas y eliminar el resto.
para mi una fila única la determinan estos campos
tempo,id_h,cod_porta_stampo, stampo, num_carosello con estos datos se repiten
muchas filas y solo quiero una de ellas, me da igual cual sea



"Alejandro Mesa" wrote:

gandy,

Te hago la misma pregunta, si existen filas repetidas, entonces cual
criterio usar para escoger una de esas filas para que nos quedemos con ella y
desechar el resto?

Ejemplo:

Si existen filas repetidas por [c1], escojer la que mayor valor de [dt] tenga.

create table dbo.t1 (
c1 int not null,
dt datetime not null
)

insert into dbo.t1 values(1, '20071203')
insert into dbo.t1 values(1, '20071204')
insert into dbo.t1 values(2, '20071205')

;with cte
as
(
select *, row_number() over(partition by c1 order by dt DESC) as rn
from dbo.t1
)
delete cte
where rn > 2

select * from dbo.t1

drop table dbo.t1
go


AMB

"gandy" wrote:

> Hola,
>
> colate es así; [tempo], [stampo], [nome_prodotto], [id_h],
> [tempo_preparazione_s], [num_extra_time], [err_in_colata_prec], [barcode],
> [tempo_ricetta], [num_macchina], [num_testa], [num_prog], [num_col_mac],
> [num_col_tes], [port_iso_set], [port_pol1_set], [port_pol2_set],
> [port_cat_set], [pres_iso_set], [pres_pol1_set], [pres_pol2_set],
> [pres_cat_set], [temp_iso_set], [temp_pol1_set], [temp_pol2_set],
> [temp_cat_set], [peso_col_set], [port_iso_real], [port_pol1_real],
> [port_pol2_real], [port_cat_real], [pres_iso_real], [pres_pol1_real],
> [pres_pol2_real], [pres_cat_real], [temp_iso_real], [temp_pol1_real],
> [temp_pol2_real], [temp_cat_real], [peso_col_real], [port_iso_all],
> [port_pol1_all], [port_pol2_all], [port_cat_all], [pres_iso_all],
> [pres_pol1_all], [pres_pol2_all], [pres_cat_all], [temp_iso_all],
> [temp_pol1_all], [temp_pol2_all], [temp_cat_all], [peso_col_all],
> [col_senza_all], [peso_col_iso], [peso_col_pol1], [peso_col_pol2],
> [peso_col_cat], [num_carosello], [cod_porta_stampo], [cod_stampo_a],
> [cod_stampo_b], [idasa]
>
> si hago
> - Select distinct from colate
> me da los registros distintos, 1850
> Si hago
> - select tempo,id_h,cod_porta_stampo, stampo, num_carosello, count (*)
> RESPES
> from colate
> group by tempo,id_h,cod_porta_stampo, stampo, num_carosello
> having count (*)>1
> Me dice dice que 650, que se repiten entre 6, 2, 3 cada uno de ellos.
> Quiero coger el resultado de esta select pero con todos los campos y
> meterlos en una tabla temporal, para poder eliminar sin problemas de colate
> los duplicados y luego volver a meter estos datos sin el campo "repes" en
> colate, para así tener todos los campos pero sin duplicados.
>
> Gracias,
>
> "Alejandro Mesa" wrote:
>
> > gandy,
> >
> > Ademas de lo mencionado por Gustavo, seria de ayuda si mencionas la version
> > que usas de SQL Server. Ademas, cual criterio usar para escojer la fila con
> > la que deseas quedarte, en el caso de los duplicados. Por ejemplo, quedarse
> > con la fila que tiene mayor valor en la columna [tempo].
> >
> >
> > AMB
> >
> > "gandy" wrote:
> >
> > > El caso es que tengo una tabla donde sé que 5 campos hacen un unique o un PK.
> > > pero como la base de datos abastece un robot, el cual por error hace que
> > > esos 5 campos (que me dan el unique o el PK) se puedan repetir, ya que el
> > > error mencionado cambia otros campos.
> > > puedo eliminar los diplicados/triplicados... pero necesito volver a poner
> > > esos campos en su sitio pero sin que esten repetidos.
> > > busco los duplicados reales asi:
> > > select tempo, id_h, cod_porta_stampo, stampo, num_carosello, count (*) repes
> > > into colate_doble
> > > from porsi_de_resultados
> > > group by tempo, id_h, cod_porta_stampo, stampo, num_carosello
> > > having count(*)>1
> > > Pero el problema aparece cuando quiero meter el registro único y bueno con
> > > todos sus campos, ya que para la data base los distintos son otros, ya que
> > > altera campos por el error.
> > > Me lio, el caso es que no sé como poder coger los registros completos de la
> > > base de datos colate una sola vez de los duplicados para luego volverlos a
> > > meter en la base de datos colate.
Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente Respuesta Tengo una respuesta
Search Busqueda sugerida