| Ver tema anterior :: Ver tema siguiente |
| Autor |
Mensaje |
pablo_emiliob Master


Registrado: 19 Sep 2005Mensajes: 211Ubicación: Barranquilla - Colombia
|
Publicado: Mie 06 Feb, 2008 3:57 pm Asunto: un DELETE en sql que no se como hacer |
|
|
HOLA!!!
la situacion es que tengo una tabla en donde tengo los sgtes campos:
FECHA
TIEMPO
ID
los tiempos son 15, 30 o 60 minutos, la ID es cualquier identificacion.
Supongase de que quiero borrar un registro que tenga 15 mins y la ID 1234. La cosa es que varios registros pueden tener los mismos valores, es decir pueden haber 1 o mas registros que tengan TIEMPO 15 min y ID 1234, la cosa es que yo quisiera borrar el mas reciente.
Yo intente hacer un query asi:
| Código: | DELETE FROM cuentas WHERE TIEMPO = 15 AND ID = '1234' ORDER BY FECHA |
y luego borraba el ultimo registro de esa consulta (TQuery), pero me dice que esa tabla es read-only...
si alguien sabe algo de como hacerlo diganme...
GRACIAS _________________ __________________________
C++ RULZ FO' EVA' |
|
| Volver arriba |
|
 |
Angel Master


Registrado: 15 Abr 2003Mensajes: 2311Ubicación: Toledo (España)
|
Publicado: Jue 07 Feb, 2008 8:43 am Asunto: |
|
|
En una orden DELETE no puedes incluir un ORDER BY ni similar. Yo haría algo así:
| Código: | DELETE FROM cuentas WHERE TIEMPO = 15 AND ID = '1234' AND FECHA IN (SELECT MAX(FECHA) FROM cuentas) |
Así debería borrar el registro más moderno, pero si hay más de uno en que puedan coincidir los tres datos te los borra todos. No sé si en una tabla Firebird, por ejemplo, se podría usar la cláusula FIRST 1. _________________ Un saludo
Necesitamos tu ayuda: Envía AI al 27595 (Coste 1,20 euros + IVA) |
|
| Volver arriba |
|
 |
pablo_emiliob Master


Registrado: 19 Sep 2005Mensajes: 211Ubicación: Barranquilla - Colombia
|
Publicado: Jue 07 Feb, 2008 4:59 pm Asunto: |
|
|
claro claro... es verdad que no es puede poner un ORDER BY en un DELETE... disculpas!!!... pero la forma en la que yo lo estaba haciendo era que le pongo a un TQuery esto
| Código: | SELECT * FROM cuentas WHERE ID='1234' AND TIEMPO=15 ORDER BY FECHA |
luego le doy
| Código: | Query1->Last();
Query1->Delete(); |
pero me bota un error diciendo que la tabla es read-only...
no se porque me bota eso _________________ __________________________
C++ RULZ FO' EVA' |
|
| Volver arriba |
|
 |
pablo_emiliob Master


Registrado: 19 Sep 2005Mensajes: 211Ubicación: Barranquilla - Colombia
|
Publicado: Vie 08 Feb, 2008 2:50 pm Asunto: |
|
|
listo gracias, ya me funciono.
Lo que hice fue colocarle un consecutivo que fuese unico para cada registro y le puse la sentencia que me dijiste pero en vez de MAX(FECHA) puse MAX(CONSEC).
GRACIAS!!! _________________ __________________________
C++ RULZ FO' EVA' |
|
| Volver arriba |
|
 |
Angel Master


Registrado: 15 Abr 2003Mensajes: 2311Ubicación: Toledo (España)
|
Publicado: Vie 08 Feb, 2008 5:32 pm Asunto: |
|
|
| pablo_emiliob escribió: | pero me bota un error diciendo que la tabla es read-only...
no se porque me bota eso |
Porque los querys, aunque a todos los efectos son tablas, realmente no puede operarse dentro de ellos; puedes moverte, subir, bajar, consultar pero no modificar el resultado de un query. _________________ Un saludo
Necesitamos tu ayuda: Envía AI al 27595 (Coste 1,20 euros + IVA) |
|
| Volver arriba |
|
 |
pablo_emiliob Master


Registrado: 19 Sep 2005Mensajes: 211Ubicación: Barranquilla - Colombia
|
Publicado: Dom 10 Feb, 2008 5:21 pm Asunto: |
|
|
aaahhh ok, entonces era por eso... bueno, igualmente gracias angel, me sirvio de mucha ayuda la sentencia SQL que me pasaste...
GRACIAS!!! _________________ __________________________
C++ RULZ FO' EVA' |
|
| Volver arriba |
|
 |
|