Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > SQL
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 11-06-2014
Sergio J. Sergio J. is offline
Miembro
 
Registrado: may 2003
Ubicación: Andalucía (España)
Posts: 97
Poder: 22
Sergio J. Va por buen camino
Tema solucionado
Responder Con Cita
  #2  
Antiguo 11-06-2014
Avatar de newtron
[newtron] newtron is offline
Membrillo Premium
 
Registrado: abr 2007
Ubicación: Motril, Granada
Posts: 3.473
Poder: 21
newtron Va camino a la fama
Cita:
Empezado por Sergio J. Ver Mensaje
Tema solucionado
¿Y nos vas a dejar con la intriga de qué has hecho al final?
__________________
Be water my friend.
Responder Con Cita
  #3  
Antiguo 11-06-2014
Sergio J. Sergio J. is offline
Miembro
 
Registrado: may 2003
Ubicación: Andalucía (España)
Posts: 97
Poder: 22
Sergio J. Va por buen camino
Bueno, la consulta que ha prevalecido a las demás es la siguiente de aposi:

Código SQL [-]
select * from tabla t1 where id = (select min(id) from tabla t2  where t1.referenca=t2.referencia )

...a pesar de ser anidada, se ejecuta rápido y el resultado es exactamente el esperado.

Gracias a todos, de verdad.

Sergio J.
Responder Con Cita
  #4  
Antiguo 11-06-2014
Avatar de duilioisola
[duilioisola] duilioisola is offline
Miembro Premium
 
Registrado: ago 2007
Ubicación: Barcelona, España
Posts: 1.735
Poder: 20
duilioisola Es un diamante en brutoduilioisola Es un diamante en brutoduilioisola Es un diamante en bruto
Una pequeña nota sobre la consulta:

Dependiendo de los índices (ascendente, descendente) probablemente la consulta mejore si pones max(id). Obviamente el registro será del último id y no del primero.
Si no te importe cuál de los registros salga, puedes probar con FIRST 1 id. Esto te seleccionará uno de los registros, pero no te asegura cual de todos. Se lo supone más óptimo porque en cuanto encuentra 1 deja de buscar. En los otros casos debe buscar en todos los que se cumplan la condición (t1.referencia=t2.referencia) y luego seleccionar uno.

Código SQL [-]
/* el primer registro de los que se repiten (ordenado por id) */
select * from tabla t1 where id = (select min(id) from tabla t2  where t1.referenca=t2.referencia)

/* el último registro de los que se repiten (ordenado por id) */
select * from tabla t1 where id = (select max(id) from tabla t2  where t1.referenca=t2.referencia)

/* uno de los registros de los que se repiten */
select * from tabla t1 where id = (select first 1 id from tabla t2  where t1.referenca=t2.referencia)
Responder Con Cita
  #5  
Antiguo 11-06-2014
Sergio J. Sergio J. is offline
Miembro
 
Registrado: may 2003
Ubicación: Andalucía (España)
Posts: 97
Poder: 22
Sergio J. Va por buen camino
Cita:
Empezado por duilioisola Ver Mensaje
Una pequeña nota sobre la consulta:

...
Código SQL [-]
...

/* uno de los registros de los que se repiten */
select * from tabla t1 where id = (select first 1 id from tabla t2  where t1.referenca=t2.referencia)
...
Efectivamente, va más rápido y no me importa cual de los registros con la misma referencia me devuelva. No sabía de la sentencia "first 1", no la había utilizado nunca.

Gracias
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Consulta SQL devuelve registros duplicados Malau SQL 5 26-05-2011 02:47:50
copiar ciertos registros de una tabla a otra JESUSNET Conexión con bases de datos 2 07-06-2008 16:53:13
Consulta de varios registros y como resultado varias columnas sierraja SQL 12 06-02-2008 12:04:22
Consulta para ver registros duplicados MarcoMae SQL 2 30-03-2005 18:40:43
Appnd Condicionado a ciertos registros JorgeBec Conexión con bases de datos 0 26-07-2004 21:56:42


La franja horaria es GMT +2. Ahora son las 08:31:36.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi