PDA

Ver la Versión Completa : Obtener Todo El Registro De Una Tabla Aunque Aunque Este Agrupado Por 2 Campos


agova
10-08-2004, 21:40:17
Tratare de explicarles mi problema con datos, tengo la siguiente informacion
1,1,2 ,01/08/04
1,1,5 ,03/08/04
1,1,9 ,02/08/04
1,1,12 ,06/08/04
1,1,3 ,12/08/04
1,1,41 ,10/08/04
1,1,201 ,11/08/04
1,2,2 ,01/08/04
1,2,5 ,02/08/04
1,2,9 ,06/08/04
1,2,12 ,05/08/04
1,2,3 ,09/08/04
1,2,41 ,10/08/04
1,2,209 ,11/08/04

Quiero obtener el registro completo (los 4 campos) del registro con la Max(Fecha) agrupado solo por los primeros dos campos.
Esto es

1,1,3 ,12/08/04
1,2,209 ,11/08/04

Alguien puede ayudarme por favor.
De antemano agradezco sus respuestas.

jachguate
10-08-2004, 21:50:15
Se me ocurre esto:


select t1.campo1, t1.campo2, t1.campo3, t1.fecha
from tabla t1
where t1.fecha = (select max(t2.fecha)
from tabla t2
where t2.campo1 = t1.campo1
and t2.campo2 = t1.campo2)


Aunque no lo he probado dado que no tengo un motor a mano... probalo y espero que regreses a decir si te sirvió o no.

Hasta luego.

;)

agova
11-08-2004, 00:00:28
Muchas gracias jachguate

Primeramente por contestar tan pronto y seguidamente por que funciono exactamente como yo esperaba a la primera.

Me gustaria de una vez saber si puedo actualizar el valor dependiendo de los resultados de esta misma consulta a una tabla.

Agradecería si alguien me puede ayudar.

Gracias de nuevo jachguate (Excelente foro)

jachguate
11-08-2004, 01:26:23
Me gustaria de una vez saber si puedo actualizar el valor dependiendo de los resultados de esta misma consulta a una tabla.

Depende de lo que esto signifique...


Update tabla
set valor = select, bla bla si se puede.

Otras cosas.. dependerá.

(Excelente foro)
Yo pienso lo mismo, por eso estoy aqui.. :p

Hasta luego.

;)

agova
11-08-2004, 02:00:35
Hice algo como esto

Update ordenp set ordenp = SELECT T1.ORDENP,T1.BULTO,T1.OPERACION,T1.RECEPCION
FROM PRODUCCIONC T1
WHERE T1.RECEPCION=
(SELECT MAX(T2.RECEPCION) FROM PRODUCCIONC T2
WHERE T1.ORDENP=T2.ORDENP AND T1.BULTO=T2.BULTO)
ORDER BY ORDENP,BULTO

Pero me da el error

parse error at or near "SELECT"

Cabe mencionar que quiero actualizar los valores de la tabla ordenp, los campos que quiero actualizar tienen los mismos nombre ordenp y bulto como los que me devuelve la consulta.

jachguate
11-08-2004, 02:16:00
El select debe devolver, como es de esperarse un solo resultado. Es decir, una sola tupla con una sola columna. También debiera estar encerrado entre paréntesis (mea culpa, pues yo los he obviado en mi respuesta anterior).

Por último, salvo que querras que todas las filas de la tabla ordenp tengan el mismo valor... debiera existir algun conjunto de campos que correlacionen entre ordenp y el select (produccionc), de manera que el valor establecido para cada fila sea el adecuado.

Hasta luego.

;)

agova
11-08-2004, 15:48:14
Gracias ya lo corregi, y queda de este modo:

Update ordenp set ordenp = (SELECT T1.ORDENP,T1.BULTO,T1.OPERACION,T1.RECEPCION
FROM PRODUCCIONC T1
WHERE T1.RECEPCION=
(SELECT MAX(T2.RECEPCION) FROM PRODUCCIONC T2
WHERE T1.ORDENP=T2.ORDENP AND T1.BULTO=T2.BULTO)
ORDER BY ORDENP,BULTO)

y como era de esperarse como me lo habias dicho devuelve el error: "subselect must have only one field" entiendo que haya que establecer una condicion en el SQL para que lo de produccionc con llave ordenp,bulto pueda ser actualizado a lo que devuelve la consulta inicial tambien con campos ordenp, bulto. cabe mencionar que quiero que cada tupla produccionc sea actualizada al valor correspondiente de la consulta.

Si alguien puede ayudarme se lo agradezco.