Los SubQuery’s o SubConsultas son herramientas poderosas si las sabemos usar, y son básicamente consultas anidadas en otras consultas la cual devuelve un conjunto de valores. Prácticamente un SubQuery puede ser utilizado en cualquier expresión y cláusula ya sean SELECT, FROM, WHERE, GROUP BY, HAVING, ORDER BY.
Como el tema de los SubQuery es bastante largo lo iré partiendo en pedazos agrupados por expresión (recomendación de Juan Cuevas), como lo ven en el título ahora veremos los SubQuerys aplicados en la cláusula FROM.
Ya sabemos que la cláusula FROM sirve para identificar las tablas de donde serán proveídos los datos a retornarse, como un SubQuery retorna un conjunto de valores también puede ser utilizado aquí como una tabla más.
Veamos un ejemplo práctico para esto. Supongamos que tenemos un negocio de cablevisión y mensualmente cobramos a nuestros clientes, en cierto momento necesitamos un listado de último pago de todos nuestros clientes, los datos en bruto lo tenemos de esta manera:
| fecha_pago | id_cliente | monto |
| 2010/03/24 | 1 | 50$ |
| 2010/04/25 | 1 | 54$ |
| 2010/03/24 | 2 | 76$ |
| 2010/04/23 | 2 | 76$ |
Y lo que necesitamos mostrar es esto básicamente:
| fecha_pago | id_cliente | monto |
| 2010/04/25 | 1 | 54$ |
| 2010/04/23 | 2 | 76$ |
A la mente rápidamente me vienen 2 maneras de resolver esto, la primera utilizando un cursor – pero ya conocen mi posición ante el uso de ellos, lo llamo destrozador de servidores – por ello la segunda manera más optima es utilizando SubQuerys en la cláusula FROM, fijense:
1 2 3 4 5 6 7 8 9 10 11 | select c.fecha_pago, c.id_cliente, c.monto from cobros c inner join (select id_cliente, max(fecha_pago) as fecha_pago from cobros group by id_cliente) as sq on c.idpersona = sq.id_cliente and c.fecha_pago = sq.fecha_pago order by 2 asc |
Articulos Relacionados:









en
en
en
en
Trackbacks/Pingbacks
[...] This post was mentioned on Twitter by Ronald Riveros, DevTroce. DevTroce said: SubQuery #SQL: cláusula FROM: Los SubQuery’s o SubConsultas son herramientas poderosas si las… http://goo.gl/fb/0ts3y [...]