PDA

Ver la Versión Completa : seleccionar el primero de cada grupo


smessina
23-03-2010, 02:00:29
Antes que nada Gracias a todos los que se tomaran en trabajo de leer este post.

trabajo con delphi 7 + zeos + mysql 5.0

tengo una tabla llamada cuotas :

ID codcredito cuotaNro importe pagada
1 1 1 de 3 100 true
2 1 2 de 3 100 true
3 1 3 de 3 100 false
4 2 1 de 3 150 true
5 2 2 de 3 150 false
6 2 3 de 3 150 false

y necesito tomar la primera cuota impaga de cada codcredito

es decir necesito crear una vista que me traiga :


id codcredito cuotanro importe
3 1 3 de 3 100
5 2 2 de 3 150

que seria algo como :

select id, codcredito, cuotanro, importe from cuotas where pagada=false group by codcredito, cuotanro, importe


pero el problema que tengo es que por alguna extraña razon el Mysql no me las ordena por el id por lo que a veces cuando hago los appends desde el tztable cuando llamo una consulta "select * from cuotas" los id me aparecen desordenados por lo que a veces la consulta anterior me devuelve:

id codcredito cuotanro importe
3 1 3 de 3 100
6 2 3 de 3 150

Si algo no se entiende por favor me avisan y tratare de ser mas Claro.

desde ya muchas Gracias

cemese
23-03-2010, 12:47:21
Buenas:

Has probado a añadir la cláusula ORDER BY a la sentencia SQL.

Un saludo

smessina
23-03-2010, 14:52:35
si probe pero al ordenamiento lo hace despues de armar la consulta
por lo que me ordena ya el resultdado de la consulta y no antes de hacer la consulta.

Caro
23-03-2010, 15:49:58
Hola smessina

........tengo una tabla llamada cuotas :

ID codcredito cuotaNro importe pagada
1 1 1 de 3 100 true
2 1 2 de 3 100 true
3 1 3 de 3 100 false
4 2 1 de 3 150 true
5 2 2 de 3 150 false
6 2 3 de 3 150 false

y necesito tomar la primera cuota impaga de cada codcredito

es decir necesito crear una vista que me traiga :


id codcredito cuotanro importe
3 1 3 de 3 100
5 2 2 de 3 150

que seria algo como :


Código SQL [-] (http://www.clubdelphi.com/foros/#)select id, codcredito, cuotanro, importe from cuotas where pagada=false group by codcredito, cuotanro, importe

Cuando se hace el group by por varios campos que no hagan referencia a un grupo, en tu caso por ejmplo id, te devuelve como resultado casi los mismos registros, por lo que la consulta que pones devolvería todos los registros donde pagada sea igual a false.

La consulta que yo haría para obtener los primeros registros de un grupo y que codcredito sea el menor, sería esta:


Select *
From cuotas c1 Inner Join (Select Min(id) as id, codcredito From cuotas
Where pagada=false Group By codcredito) as c2
on (c1.id=c2.id)


Saluditos

smessina
25-03-2010, 15:25:03
Gracias con eso lo solucione..