Buenas tardes. Creo que ya te lo han sugerido, pero yo tambien voy a hacerlo. ¿Has probado a ordenar descendentemente y recuperar la primera fila?
Otra cosa que se me ocurre (que también te han aproximado) es que si haces: SELECT mtanys, Max(mtset), mtqtat, Mtemp, Mtten, mtart FROM movtda WHERE Mtemp =:@empresa and Mtten=:Ctten and mtart=:ctart and mttipm='IF' GROUP BY mtanys, mtqtat, Mtemp, Mtten, mtart Tendrías una vista que incluiría la fecha (semana) del último movimiento de inventario de cada año, para cada artículo, empresa y Mtten (que no he pillado lo que es). A partir de esta vista te seria fácil hacer otra consulta, que sería la que utilizaras para el cursor, que te diera directamente la cantidad que estuvieras buscando, para todos los artículos de golpe, a una fila por artículo. Eso te evita, sobre todo, tener que llamar a la consulta 5000 veces. Si no quieres TODOS los artículos, puedes unir la consulta que te digo con un INNER JOIN a la que te devuelve los artículos que te interesan, para que solo te vengan los datos de estos. Y por supuesto todo esto acelerado con un índice. Gustavo Adolfo Márquez Álvarez. Departamento de Informática. [email protected] inforZitro, S. L. Carretera de Níjar, nº 404. 04007 Almería (España). Teléfono: 950 226 658. Extensión: 148. Fax: 950 223 620. -----Mensaje original----- De: [email protected] [mailto:[email protected]] En nombre de [email protected] Enviado el: miércoles, 22 de septiembre de 2010 13:04 Para: forum.help400 Asunto: RE: ultimo registro SQL Hola si incluyo el 'max' me obliga a hacer un group by y no puedo, porque lo que busco es el importe del ultimo movimiento de un articulo determinado, movimiento que no sé cuando se realizó. Efectivamente hay un ORDER BY en la clausula. La sentencia es la siguiente: DECLARE @CURSOR SCROLL CURSOR FOR SELECT mtanys, mtset, mtqtat FROM movtda WHERE Mtemp=:@empresa and Mtten=:Ctten and mtart=:ctart and mttipm='IF' ORDER BY mtanys, mtset Pero esta sentencia está dentro de un bucle que va leyendo articulo por articulo y hace unas 5000 lecturas y por lo tanto ejecuta esta sentencia unas 5000 veces . Se trata de mirar el valor del ultimo movimiento de cada articulo. Mi duda viene porque si esto mismo lo hago con SETLL/ READP va bastante más rápido y algo debo de estar haciendo mal en SQL porque siempre se habla de que el rendimiento es mejor. Por cierto, Santiago, el archivo es un archivo definido por DDS 'tradicionales'. Igualmente le puedo crear un indice? Salut
____________________________________________________ Únete a Recursos AS400, nuestra Comunidad ( http://bit.ly/db68dd ) Forum.Help400 © Publicaciones Help400, S.L.

