Club Delphi  
    Paypal   FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Bases de datos > Firebird e Interbase
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

 
 
Herramientas Buscar en Tema Desplegado
  #4  
Antiguo 23-11-2018
novato_erick novato_erick is offline
Miembro
 
Registrado: ago 2010
Ubicación: Panamá
Posts: 397
Poder: 16
novato_erick Va por buen camino
Resuelto ¿Consulta Correcta con DATEDIFF?

Hola Chicos:
Hace un par de Días encontré la solución a mi problema talvez pueda servir a algún otro la cual necesite hacer una simple consulta en Firebird en la que se requiera saldos en terminos de rango de días 30, 60, 90 , 120 y más de 120.

Aquí está lo que realicé:
Basada en la condicción IFF de Firebird mostrando un valor Booland realicé en el resultado otra subconsulta ejemplo:

Código SQL [-]
SELECT
      FAC_CREDITO.ID_CLIENTE,
      FAC_CREDITO.ID_FACTURA,
      CAST(FAC_CREDITO.FECHAFIN_CRE AS DATE) AS FECHAFINALIZA,
      IIF( DATEDIFF(DAY FROM CURRENT_DATE TO CAST(FAC_CREDITO.FECHAFIN_CRE AS DATE))
      >=1 AND (FAC_CREDITO.FECHAFIN_CRE <> CURRENT_DATE ),
     ( SELECT IIF( COALESCE(MIN(ABONO_CREDI.MONTO_SALDONUEVO),0) = 0, /*Realizo Condición nuevamente con Subconsulta a la tabla Abonos*/
      (select FAC_CREDITO.M_VENTACREDITO from FAC_CREDITO
      where  FAC_CREDITO.ID_CLIENTE = :ID_C AND 
      FAC_CREDITO.ID_FACTURA =:ID_F AND PENDIENTE = 'S' ),
      COALESCE(MIN(ABONO_CREDI.MONTO_SALDONUEVO),0))
      FROM ABONO_CREDI WHERE 
      ABONO_CREDI.ID_CLIENTE = :ID_C AND ABONO_CREDI.ID_FACTURA = :ID_F),0)
      AS SALDO_CORRIENTE,
      
       IIF( DATEDIFF(DAY FROM CURRENT_DATE TO CAST(FAC_CREDITO.FECHAFIN_CRE AS DATE))
       <=-1 AND DATEDIFF(DAY FROM CURRENT_DATE TO CAST(FAC_CREDITO.FECHAFIN_CRE AS DATE))
       >=-30 OR FAC_CREDITO.FECHAFIN_CRE = CURRENT_DATE,
      ( SELECT IIF( COALESCE(MIN(ABONO_CREDI.MONTO_SALDONUEVO),0) = 0,
      (select FAC_CREDITO.M_VENTACREDITO from FAC_CREDITO
      where  FAC_CREDITO.ID_CLIENTE = :ID_C AND 
      FAC_CREDITO.ID_FACTURA =:ID_F AND PENDIENTE = 'S' ),
      COALESCE(MIN(ABONO_CREDI.MONTO_SALDONUEVO),0))
      FROM ABONO_CREDI WHERE 
      ABONO_CREDI.ID_CLIENTE = :ID_C AND ABONO_CREDI.ID_FACTURA = :ID_F),0)
      AS VENCIDOS30,  
      
      IIF( DATEDIFF(DAY FROM CURRENT_DATE TO CAST(FAC_CREDITO.FECHAFIN_CRE AS DATE))
      <=-31 AND DATEDIFF(DAY FROM CURRENT_DATE TO CAST(FAC_CREDITO.FECHAFIN_CRE AS DATE))
      >=-60,  ( SELECT IIF( COALESCE(MIN(ABONO_CREDI.MONTO_SALDONUEVO),0) = 0,
      (select FAC_CREDITO.M_VENTACREDITO from FAC_CREDITO
      where  FAC_CREDITO.ID_CLIENTE = :ID_C AND 
      FAC_CREDITO.ID_FACTURA =:ID_F AND PENDIENTE = 'S' ),
      COALESCE(MIN(ABONO_CREDI.MONTO_SALDONUEVO),0))
      FROM ABONO_CREDI WHERE 
      ABONO_CREDI.ID_CLIENTE = :ID_C AND ABONO_CREDI.ID_FACTURA = :ID_F),0) AS VENCIDOS60,
      
      IIF( DATEDIFF(DAY FROM CURRENT_DATE TO CAST(FAC_CREDITO.FECHAFIN_CRE AS DATE))
      <=-61 AND DATEDIFF(DAY FROM CURRENT_DATE TO CAST(FAC_CREDITO.FECHAFIN_CRE AS DATE))
      >=-90, ( SELECT IIF( COALESCE(MIN(ABONO_CREDI.MONTO_SALDONUEVO),0) = 0,
      (select FAC_CREDITO.M_VENTACREDITO from FAC_CREDITO
      where  FAC_CREDITO.ID_CLIENTE = :ID_C AND 
      FAC_CREDITO.ID_FACTURA =:ID_F AND PENDIENTE = 'S' ),
      COALESCE(MIN(ABONO_CREDI.MONTO_SALDONUEVO),0))
      FROM ABONO_CREDI WHERE 
      ABONO_CREDI.ID_CLIENTE = :ID_C AND ABONO_CREDI.ID_FACTURA = :ID_F),0) AS VENCIDOS90,
    
      IIF( DATEDIFF(DAY FROM CURRENT_DATE TO CAST(FAC_CREDITO.FECHAFIN_CRE AS DATE))
      <=-91 AND DATEDIFF(DAY FROM CURRENT_DATE TO CAST(FAC_CREDITO.FECHAFIN_CRE AS DATE))
      >=-120,( SELECT IIF( COALESCE(MIN(ABONO_CREDI.MONTO_SALDONUEVO),0) = 0,
      (select FAC_CREDITO.M_VENTACREDITO from FAC_CREDITO
      where  FAC_CREDITO.ID_CLIENTE = :ID_C AND 
      FAC_CREDITO.ID_FACTURA =:ID_F AND PENDIENTE = 'S' ),
      COALESCE(MIN(ABONO_CREDI.MONTO_SALDONUEVO),0))
      FROM ABONO_CREDI WHERE 
      ABONO_CREDI.ID_CLIENTE = :ID_C AND ABONO_CREDI.ID_FACTURA = :ID_F),0) AS VENCIDOS120,
      
      IIF( DATEDIFF(DAY FROM CURRENT_DATE TO CAST(FAC_CREDITO.FECHAFIN_CRE AS DATE))
      <=-121 , ( SELECT IIF( COALESCE(MIN(ABONO_CREDI.MONTO_SALDONUEVO),0) = 0,
      (select FAC_CREDITO.M_VENTACREDITO from FAC_CREDITO
      where  FAC_CREDITO.ID_CLIENTE = :ID_C AND 
      FAC_CREDITO.ID_FACTURA =:ID_F AND PENDIENTE = 'S' ),
      COALESCE(MIN(ABONO_CREDI.MONTO_SALDONUEVO),0))
      FROM ABONO_CREDI WHERE 
      ABONO_CREDI.ID_CLIENTE = :ID_C AND ABONO_CREDI.ID_FACTURA = :ID_F),0) AS VENCIDOSMAS121   
      
      FROM
              FAC_CREDITO
                          WHERE FAC_CREDITO.PENDIENTE = 'S' AND
                          FAC_CREDITO.ID_CLIENTE = :IDCLIENTECREDITO AND 
                          FAC_CREDITO.ID_FACTURA = :IDFACTURACREDITO

En fin el resultado fue el requerido por el momento. la optimizacion vendrá más adelante la cual me tomaré una par de hora para ejecutarla
tambien más adelante haré mejoras en la consulta ya que esta solamente está basada en una factura especifica con numero de factura y cliente trayendo detalles de los abonos en respectiva a esa factura lo que probablemente aya a realizar es en caso que se encuentren mas de dos facturas creditos y cada factura tiene sus respectivos movimientos y sus respectivos saldo con cada numero de factura.

Bueno hasta aquí por el momento he resuelto mi interrogante.

Saludos a Todos

novato_erick
Responder Con Cita
 



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
forma de programar no se si es la correcta ? gulder MySQL 4 05-04-2016 17:49:51
Creacion Correcta de Forms??? jbautista Varios 7 27-05-2010 16:48:29
Pronunciación correcta. marcoszorrilla La Taberna 1 12-11-2008 21:38:25
Problema con consultas DateDiff enecumene MySQL 1 07-12-2007 18:35:03
La elección correcta ! Xianto Tablas planas 2 07-01-2005 12:35:24


La franja horaria es GMT +2. Ahora son las 16:56:39.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi