Descartar registros que se repiten consecutivamente

11/05/2010 - 14:14 por José Antonio Muñoz | Informe spam
Hola al grupo,

¿como puedo descartar los registros en una consulta donde el valor de uno de
los campos se repite de manera consecutiva ordenando la consulta por un
campo clave?

Ejemplo: En la consulta siguiente el registro cuyo código 3 se descarta ya
que se repite del valor anterior.

Codigo Fecha
1 12/01/2009
2 03/03/2009
3 03/03/2009
4 01/05/2009
5 03/03/2009


Nota: No me sirve la siguiente consulta ya que cuando la tabla tiene muchos
registros (sobre 200.000) tarda demasiado.

SELECT Codigo, Fecha FROM
(SELECT Codigo, Fecha, CASE WHEN (SELECT TOP 1 Fecha FROM Tabla WHERE
Codigo<xx.Codigo ORDER BY Codigo Desc)=Fecha THEN 1 ELSE 0 END As Repite
FROM Tabla As xx) As TablaInterna
WHERE Repite=0

saludos,
José Antonio

Preguntas similare

Leer las respuestas

#1 Gustavo Cantero \(The Wolf\)
11/05/2010 - 15:51 | Informe spam
José:
Podrías utilizar esta consulta:

SELECT MIN(Codigo), Fecha
FROM TablaInterna
GROUP BY Fecha

Suerte!

Gustavo A. Cantero
Scientia® Soluciones Informáticas
MCP - MCSD - MCTS - MCPD
http://www.scientia.com.ar
http://www.programandoamedianoche.com
http://foro.scientia.com.ar

De: José Antonio Muñoz [mailto:]
Expuesto a las: Martes, 11 de Mayo de 2010 09:14 a.m.
Expuesto en: microsoft.public.es.sqlserver
Conversación: Descartar registros que se repiten consecutivamente
Asunto: Descartar registros que se repiten consecutivamente

Hola al grupo,

¿como puedo descartar los registros en una consulta donde el valor de
uno de
los campos se repite de manera consecutiva ordenando la consulta por un
campo clave?

Ejemplo: En la consulta siguiente el registro cuyo código 3 se descarta
ya
que se repite del valor anterior.

Codigo Fecha
1 12/01/2009
2 03/03/2009
3 03/03/2009
4 01/05/2009
5 03/03/2009


Nota: No me sirve la siguiente consulta ya que cuando la tabla tiene
muchos
registros (sobre 200.000) tarda demasiado.

SELECT Codigo, Fecha FROM
(SELECT Codigo, Fecha, CASE WHEN (SELECT TOP 1 Fecha FROM Tabla WHERE
Codigo<xx.Codigo ORDER BY Codigo Desc)=Fecha THEN 1 ELSE 0 END As Repite

FROM Tabla As xx) As TablaInterna
WHERE Repite=0

saludos,
José Antonio
Respuesta Responder a este mensaje
#2 Jose Antonio
11/05/2010 - 23:36 | Informe spam
Y el codigo 5 no se descarta?

"José Antonio Muñoz" escribió en el mensaje de
noticias:#
Hola al grupo,

¿como puedo descartar los registros en una consulta donde el valor de uno
de los campos se repite de manera consecutiva ordenando la consulta por un
campo clave?

Ejemplo: En la consulta siguiente el registro cuyo código 3 se descarta
ya que se repite del valor anterior.

Codigo Fecha
1 12/01/2009
2 03/03/2009
3 03/03/2009
4 01/05/2009
5 03/03/2009


Nota: No me sirve la siguiente consulta ya que cuando la tabla tiene
muchos registros (sobre 200.000) tarda demasiado.

SELECT Codigo, Fecha FROM
(SELECT Codigo, Fecha, CASE WHEN (SELECT TOP 1 Fecha FROM Tabla WHERE
Codigo<xx.Codigo ORDER BY Codigo Desc)=Fecha THEN 1 ELSE 0 END As Repite
FROM Tabla As xx) As TablaInterna
WHERE Repite=0

saludos,
José Antonio

Respuesta Responder a este mensaje
#3 Jose Antonio
12/05/2010 - 00:18 | Informe spam
Si tu tabla tiene como primay key el codigo la consulta que describes es mas
o menos eficiente y yo creo que te va a ser imposible mejorarla.

Si codigo no es la clave primaria y o no puedes crearla
puedes probar otra alternativa en el escenario que tengas, pero yo creo que
no deben de ser mas eficientes que tu consulta.

prueba esta para ver como te va

//Con vairable tabla
declare @p table (codigo int, fecha date, marca int primary key)

insert @p select codigo,fecha,ROW_NUMBER() over (order by codigo) from
prueba

select l.codigo,l.fecha from @p l where l.fecha<>(select fecha from @p where
marca=l.marca-1) or l.marca=1
order by l.codigo;



"José Antonio Muñoz" escribió en el mensaje de
noticias:#
Hola al grupo,

¿como puedo descartar los registros en una consulta donde el valor de uno
de los campos se repite de manera consecutiva ordenando la consulta por un
campo clave?

Ejemplo: En la consulta siguiente el registro cuyo código 3 se descarta
ya que se repite del valor anterior.

Codigo Fecha
1 12/01/2009
2 03/03/2009
3 03/03/2009
4 01/05/2009
5 03/03/2009


Nota: No me sirve la siguiente consulta ya que cuando la tabla tiene
muchos registros (sobre 200.000) tarda demasiado.

SELECT Codigo, Fecha FROM
(SELECT Codigo, Fecha, CASE WHEN (SELECT TOP 1 Fecha FROM Tabla WHERE
Codigo<xx.Codigo ORDER BY Codigo Desc)=Fecha THEN 1 ELSE 0 END As Repite
FROM Tabla As xx) As TablaInterna
WHERE Repite=0

saludos,
José Antonio

Respuesta Responder a este mensaje
#4 José Antonio Muñoz
12/05/2010 - 09:12 | Informe spam
El código 5 aunque la fecha se repite del código 2 y 3 pero al no estar
consecutivo no se descarta, solo los registros repetidos que estén
consecutivos.

saludos,
José Antonio Muñoz

"Jose Antonio" escribió en el mensaje de
noticias news:
Y el codigo 5 no se descarta?

"José Antonio Muñoz" escribió en el mensaje de
noticias:#
Hola al grupo,

¿como puedo descartar los registros en una consulta donde el valor de uno
de los campos se repite de manera consecutiva ordenando la consulta por
un campo clave?

Ejemplo: En la consulta siguiente el registro cuyo código 3 se descarta
ya que se repite del valor anterior.

Codigo Fecha
1 12/01/2009
2 03/03/2009
3 03/03/2009
4 01/05/2009
5 03/03/2009


Nota: No me sirve la siguiente consulta ya que cuando la tabla tiene
muchos registros (sobre 200.000) tarda demasiado.

SELECT Codigo, Fecha FROM
(SELECT Codigo, Fecha, CASE WHEN (SELECT TOP 1 Fecha FROM Tabla WHERE
Codigo<xx.Codigo ORDER BY Codigo Desc)=Fecha THEN 1 ELSE 0 END As Repite
FROM Tabla As xx) As TablaInterna
WHERE Repite=0

saludos,
José Antonio

Respuesta Responder a este mensaje
#5 L. Garcia
12/05/2010 - 12:13 | Informe spam
Hola, yo probaria esta consulta:

Select T1.Codigo, T1.Fecha
From <Tabla> AS T1
Left Join <Tabla> AS T2 ON T2.Codigo = T1.Codigo-1 AND T2.Fecha =
T1.Fecha
Where T2.Codigo IS NULL

Si tienes el campo Codigo como PK o Indice, tiene que ir como un tiro, y
sino, tampoco creo que se demore mucho.

Ya diras si te sirve.

Saludos

PD: Una variantes de esta consulta sirve para buscar 'huecos' en campos con
números consecutivos ;-)


"José Antonio Muñoz" escribió en el mensaje
news:%
Hola al grupo,

¿como puedo descartar los registros en una consulta donde el valor de uno
de los campos se repite de manera consecutiva ordenando la consulta por un
campo clave?

Ejemplo: En la consulta siguiente el registro cuyo código 3 se descarta
ya que se repite del valor anterior.

Codigo Fecha
1 12/01/2009
2 03/03/2009
3 03/03/2009
4 01/05/2009
5 03/03/2009


Nota: No me sirve la siguiente consulta ya que cuando la tabla tiene
muchos registros (sobre 200.000) tarda demasiado.

SELECT Codigo, Fecha FROM
(SELECT Codigo, Fecha, CASE WHEN (SELECT TOP 1 Fecha FROM Tabla WHERE
Codigo<xx.Codigo ORDER BY Codigo Desc)=Fecha THEN 1 ELSE 0 END As Repite
FROM Tabla As xx) As TablaInterna
WHERE Repite=0

saludos,
José Antonio

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