Hola libra:
A reserva de lo que comente luisef, autor del post, creo que hay un error en tu consulta. si checas hay dos registros para la carclave.
carclave noguia fec_reg destciur
c-223 00000123 12/02/2011 cancun
c-223 00000134 14/02/2011 iztapalapa
Según entendí, lo que que pretende es que se muestre el último de los registros entonces debería regresar el segundo de estos (que corresponde al noguia 0000134-iztapalapa)...
Igual y dejo el ejemplo en SQL Server para que le eches un vistazo. Además convendría que checaras el plan de ejecución para las consultas. Te darás cuenta que la consulta que propongo es mucho más eficiente que la que propones (aun sin definir llaves en la tabla):
Código SQL:
Ver originalDECLARE @docdb TABLE (carclave VARCHAR(10), noguia VARCHAR(10), fec_reg datetime, destciur VARCHAR(50))
INSERT INTO @docdb VALUES ('c-223', '00000123', '20110212', 'cancun')
INSERT INTO @docdb VALUES ('c-45', '00000234', '20110216', 'tultitlan')
INSERT INTO @docdb VALUES ('c-223', '00000134', '20110214', 'iztapalapa')
SELECT * FROM @docdb
SELECT T1.* FROM @docdb T1 INNER JOIN
(
SELECT carclave, MAX(fec_reg) max_fecha_reg FROM @docdb GROUP BY carclave
) T2 ON T1.carclave = T2.carclave AND T1.fec_reg = T2.max_fecha_reg
SELECT * FROM (
SELECT
ROW_NUMBER () OVER ( PARTITION BY t1.no_guia,t1.carclave ORDER BY t1.no_guia,t1.carclave ASC) AS RN,
t1.no_guia,t1.carclave,t2.fec_reg,t2.destciur FROM (
SELECT MAX(noguia) no_guia,carclave
FROM @docdb
GROUP BY carclave) t1 INNER JOIN (
SELECT carclave,fec_reg,destciur FROM @docdb
) t2 ON (t1.carclave=t2.carclave)
)t3 WHERE rn=1
Pero como te comento, esperemos que luisef haga los comentarios pertinentes
Saludos
Leo.