• Lunes 23 de Diciembre de 2024, 15:44

Autor Tema:  Distinct En Unico Campo  (Leído 1895 veces)

ArKaNtOs

  • Miembro de PLATA
  • *****
  • Mensajes: 1253
  • Nacionalidad: mx
    • Ver Perfil
Distinct En Unico Campo
« en: Jueves 8 de Mayo de 2008, 17:27 »
0
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
  1.  
  2. SELECT DISTINCT
  3.   A.Numero_Cuenta as Cuenta,
  4.   A.Paterno + ' ' + A.Materno + ' ' + A.Nombre as Nombre,
  5.   A.Saldo_Vencido as Vencido,
  6.   A.Saldo as Saldo,
  7.   convert(datetime, B.Fecha) as Fecha,
  8.   B.Total
  9. FROM
  10.   tbl_Clientes A WITH(INDEX(PK_tbl_Clientes), NOLOCK) LEFT JOIN
  11.   tbl_Movimiento B WITH(INDEX(PK_tbl_Movimiento), NOLOCK) ON
  12.     A.Numero_Cuenta = B.Numero_Cuenta
  13. WHERE
  14.   A.cve_Estado = 2 And UltVencido > 2 And B.cve_Movimiento = 3
  15. ORDER BY
  16.   A.numero_Cuenta, convert(datetime, B.Fecha) Desc
  17.  

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

  • Miembro de PLATA
  • *****
  • Mensajes: 1253
  • Nacionalidad: mx
    • Ver Perfil
Re: Distinct En Unico Campo
« Respuesta #1 en: Viernes 9 de Mayo de 2008, 17:42 »
0
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
  1.   SELECT
  2.     A.Numero_Cuenta as Cuenta,
  3.     A.Paterno + ' ' + A.Materno + ' ' + A.Nombre as Nombre,
  4.     A.Saldo_Vencido as Vencido,
  5.     A.Saldo,
  6.     max(convert(datetime, B.Fecha)) as FechaUlt,
  7.     (
  8.       SELECT TOP 1 C.Total
  9.       FROM tbl_Movimiento C
  10.       WHERE
  11.         C.Numero_Cuenta = A.Numero_Cuenta
  12.         And C.cve_Movimiento = 3
  13.         And max(convert(datetime, B.Fecha)) = convert(datetime, C.Fecha)
  14.     ) as Total
  15.   FROM
  16.     tbl_Clientes A WITH(INDEX(PK_tbl_Clientes), NOLOCK) LEFT JOIN
  17.     tbl_Movimiento B WITH(INDEX(PK_tbl_Movimiento), NOLOCK) ON
  18.       A.Numero_Cuenta = B.Numero_Cuenta
  19.   WHERE
  20.     A.cve_Estado = 2 And UltVencido >=4 And B.cve_Movimiento = 3
  21.   GROUP BY
  22.     A.numero_Cuenta, A.Paterno + ' ' + A.Materno + ' ' + A.Nombre, A.Saldo_Vencido, A.Saldo
  23.   ORDER BY
  24.     A.numero_Cuenta
  25.  
  26.  
:kicking:

Estaba sencillo no? :P  :scream: