Pregunta

Supongamos que se tiene una tabla como esta :

CREATE TABLE `amoreAgentTST01` (
  `moname` char(64) NOT NULL DEFAULT '',
  `updatetime` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  `data` longblob,
  PRIMARY KEY (`moname`,`updatetime`)

Tengo una consulta para encontrar el más antiguo de los registros para cada uno de los distintos 'moname', pero sólo si hay varios registros para este 'moname' :

SELECT moname, updatetime FROM amoreAgentTST01 a 
WHERE (SELECT count(*) FROM amoreAgentTST01 x WHERE x.moname = a.moname) > 1 
  AND a.updatetime = (SELECT min(updatetime) FROM amoreAgentTST01 y WHERE y.moname = a.moname) ;

Mi pregunta es :cómo hacer lo mismo pero seleccionando la X más antigua de valores ?Ahora me basta con ejecutar esta, eliminar los más antiguos valores y vuelva a ejecutar es...que no es tan agradable.

Segundos pregunta es :¿qué piensa usted de la consulta anterior ?puede ser mejorado ?es allí cualquier obvio mala práctica ?

Gracias de antemano por sus consejos y ayuda.

Barth

¿Fue útil?

Solución

Sería algo así como este trabajo (no probado):

SELECT moname, MIN(updatetime) FROM amoreAgentTST01 
GROUP BY moname HAVING COUNT(moname)>1

Edit: el de arriba es sólo como un reemplazo para el código existente, por lo que directamente no responder a su pregunta.

Creo que algo como esto debería funcionar para su pregunta principal:

SELECT moname, updatetime FROM amoreAgentTST01 
GROUP BY moname, updatetime 
HAVING COUNT(moname)>1 
ORDER BY updatetime LIMIT 0, 10

Editar - lo siento, lo anterior no funciona porque es regresar a sólo 10 los registros para todos los monames - en lugar de los 10 más antiguo para cada uno.Que me creo.

Uno de los más ir a este (lo admito, este se ve un poco complicada):

SELECT a.moname, a.updatetime FROM amoreAgentTST01 a
WHERE EXISTS 
(SELECT * FROM amoreAgentTST01 b 
WHERE a.moname = b.moname AND a.updatetime = b.updatetime  
ORDER BY b.updatetime LIMIT 0, 10)
AND (SELECT COUNT(*) FROM amoreAgentTST01 x WHERE x.moname = a.moname) > 1

Debo añadir que si hay una columna de ID - generalmente los de clave principal, a continuación, que debe ser utilizado para la sub-consulta une para mejorar el rendimiento.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top