Bases de Datos > SQL Server
Distinct En Unico Campo
(1/1)
ArKaNtOs:
Hola amigos, ya tenia mucho que no podia ingresar, sobre todo por el trabajo me da pena porque en este caso solo vengo por algo de ayuda, espero se apiaden algo de mi :unsure: , bueno les cuento mi dilema:
resulta que estoy tratando de mejorar un Store Procedure o en su defecto la consulta :P
es que tengo un store que realiza su cometido pero se lleva como 5 a 10 minutos en hacerlo en el mejor de los casos :scream: entonces me di a la tarea de tratarlo de mejorar con un solo query, pero el problema es que no me funciona de manera adecuada, les doy un ejemplo:
tengo una tabla de clientes con los datos de cliente (por supuesto :P) y la de movimientos que es todas las compras abonos y de mas movimientos del cliente,
el detalle es que tengo que tengo que mostrar el numero de cuenta del cliente su saldo su ultimo abono y la fecha de ese abono para lo cual plantee este query:
--- Código: Text --- SELECT DISTINCT A.Numero_Cuenta as Cuenta, A.Paterno + ' ' + A.Materno + ' ' + A.Nombre as Nombre, A.Saldo_Vencido as Vencido, A.Saldo as Saldo, convert(datetime, B.Fecha) as Fecha, B.TotalFROM tbl_Clientes A WITH(INDEX(PK_tbl_Clientes), NOLOCK) LEFT JOIN tbl_Movimiento B WITH(INDEX(PK_tbl_Movimiento), NOLOCK) ON A.Numero_Cuenta = B.Numero_CuentaWHERE A.cve_Estado = 2 And UltVencido > 2 And B.cve_Movimiento = 3ORDER BY A.numero_Cuenta, convert(datetime, B.Fecha) Desc
el detalle es que me arroja todos los abonos de la cuenta y no solo un abono esto debido a que las fechas pues son variables y el distinct es para todos los campos no solo para un campo, quisiera ver que puedo realizar, o que estoy haciendo mal, de hecho ya probe con GROUP BY y nada, muchas gracias anticipadas
ArKaNtOs:
Hola de nuevo amigos, despues de tanta frustación y mentadas de ..... lo logre, era muy simple con una subconsulta. les dejo la solución por si a alguien le llegase a servir ;)
--- Código: Text --- SELECT A.Numero_Cuenta as Cuenta, A.Paterno + ' ' + A.Materno + ' ' + A.Nombre as Nombre, A.Saldo_Vencido as Vencido, A.Saldo, max(convert(datetime, B.Fecha)) as FechaUlt, ( SELECT TOP 1 C.Total FROM tbl_Movimiento C WHERE C.Numero_Cuenta = A.Numero_Cuenta And C.cve_Movimiento = 3 And max(convert(datetime, B.Fecha)) = convert(datetime, C.Fecha) ) as Total FROM tbl_Clientes A WITH(INDEX(PK_tbl_Clientes), NOLOCK) LEFT JOIN tbl_Movimiento B WITH(INDEX(PK_tbl_Movimiento), NOLOCK) ON A.Numero_Cuenta = B.Numero_Cuenta WHERE A.cve_Estado = 2 And UltVencido >=4 And B.cve_Movimiento = 3 GROUP BY A.numero_Cuenta, A.Paterno + ' ' + A.Materno + ' ' + A.Nombre, A.Saldo_Vencido, A.Saldo ORDER BY A.numero_Cuenta :kicking:
Estaba sencillo no? :P :scream:
Navegación
Ir a la versión completa