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.

Responder a